这可能是一个简单的答案,但我似乎无法在任何地方找到它。
我的表格如下:
item_id tag_id
----------------------
100 55
101 55
100 320
102 320
100 77
100 489
101 200
要求带有标签55和320的商品应该返回item_id = 100(但不是101或102,因为他们没有标签)
答案 0 :(得分:4)
您可以使用HAVING
子句:
SELECT item_id
FROM tab_name
WHERE tag_id IN (1,2)
GROUP BY item_id
HAVING COUNT(DISTINCT tag_id) = 2;
的 SqlFiddleDemo
强>
甚至:
SELECT item_id
FROM tab_name
GROUP BY item_id
HAVING GROUP_CONCAT(DISTINCT tag_id ORDER BY tag_id ) = '1,2';
的 SqlFiddleDemo2
强>
答案 1 :(得分:2)
您可以尝试:
SELECT item_id
FROM table_name
WHERE tag_id IN (55,320)
GROUP BY item_id
HAVING COUNT(DISTINCT tag_id) > 1;
它将返回具有多个不同tag_id的item_id。
用逗号分隔IN中的标签,并按照您想要的数量分开。
答案 2 :(得分:0)
SELECT item_id
FROM Table1
WHERE tag_id IN (55,320)
GROUP BY item_id
HAVING COUNT(DISTINCT tag_id) > 1