MySQL记录匹配多个标准

时间:2016-07-16 11:27:11

标签: mysql sql

这可能是一个简单的答案,但我似乎无法在任何地方找到它。

我的表格如下:

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,因为他们没有标签)

3 个答案:

答案 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

Fiddle example