【发布时间】:2016-01-24 03:39:16
【问题描述】:
我需要返回一个与多对多关系上的所有 WHERE 语句匹配的结果。解释:
我有一个这样的表结构。
CREATE TABLE `product` (
`product_id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
PRIMARY KEY (`product_id`));
CREATE TABLE `product_has_tag` (
`product_id` INT UNSIGNED NOT NULL,
`tag_id` INT UNSIGNED NOT NULL
);
CREATE TABLE `tag` (
`tag_id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
`value` VARCHAR(30) NULL,
PRIMARY KEY (`tag_id`));
现在我遇到这样的情况:
Product: {
[product_id:1],
[product_id:2],
[product_id:3]};
Tags: {
[tag_id:1, value:'XX'],
[tag_id:2, value:'YY']}
ProductHasTag: {
[product_id:1, tag_id:1],
[product_id:1, tag_id:2],
[product_id:2, tag_id:1],
[product_id:3, tag_id:2]}
基本上,有一种产品同时有标签,其余的只有一种。现在我需要一个 SQL 搜索条件,它只返回具有两个标签关联的产品。像
SELECT * FROM `product`
LEFT JOIN product_has_tag USING(product_id)
LEFT JOIN tag USING(tag_id)
WHERE value LIKE '%X%' AND value LIKE '%Y%'
这显然不起作用,因为搜索的值不在一个标签中,而是在两个标签中。 任何帮助表示赞赏。
【问题讨论】:
-
也许我不明白这个问题,但你不能在你的
WHERE中使用OR吗? -
@cricket_007 感谢您查看我的问题!不幸的是,使用 OR 将返回所有产品,我只需要 id 为 1 的产品
标签: mysql select join many-to-many where