我的SQL句子有点问题。我有一个带有product_id和flag_id的表,现在我想获得与指定的所有标志匹配的product_id。我知道你必须自己加入它,以匹配多个,但我不知道它的确切SQL。
标志表
product_id | flag_id
1 1
1 51
1 23
2 1
2 51
3 1
我想获得所有拥有flag_id 1,51和23的产品。
答案 0 :(得分:5)
获取 匹配所有 指定标志的product_id
此问题称为Relational Division。解决问题的一种方法是:
GROUP BY product_id
。IN
谓词指定要匹配的标记。HAVING
子句确保每个产品都有标记SELECT product_id
FROM flags
WHERE flag_id IN(1, 51, 23)
GROUP BY product_id
HAVING COUNT(DISTINCT flag_id) = 3
HAVING
子句将确保所选的product_id
必须同时包含三个标志,如果只有一个或两个标志将被删除。
请在此处查看:
这只会给你:
| PRODUCT_ID |
--------------
| 1 |
答案 1 :(得分:0)
试试这个:
SELECT *
FROM your_table
WHERE flag_id IN(1,2,..);
答案 2 :(得分:0)
首先,如果您可以指定之前尝试过的内容会有所帮助,但据我所知,您需要获得带有特定标记的产品,因此您只需使用WHERE
:
SELECT product_id FROM Product WHERE flag_id IN (1,2,3,4,5)
答案 3 :(得分:0)
尝试:
SELECT *
FROM TABLE_NAME A INNER JOIN TABLE_NAME B ON A.product_id = B.product_id