mysql n:m relationship:查找具有多个特定关系的行

时间:2012-07-10 08:57:33

标签: mysql many-to-many

我有两个SQL表,'产品'和'标签'。他们有一个n:m关系,使用第三个表'product_tags'。

我想使用查询来查找具有多个特定标记的每个产品。例如,查找与标签1,23和54有关的每个产品。

有没有办法只用一个查询来做到这一点?

2 个答案:

答案 0 :(得分:4)

您可以使用此解决方案。这会获得包含 所有 关键字1,23和54的所有产品:

SELECT a.*
FROM products a
INNER JOIN product_tags b ON a.product_id = b.product_id
WHERE b.tag_id IN (1,23,54)
GROUP BY a.product_id
HAVING COUNT(1) = 3

3WHERE IN列表中的项目数,因此您可以根据要检查的代码数量进行相应调整。

答案 1 :(得分:0)

试试这个

SELECT * FROM

 PRODUCTS p 
 JOIN PRODUCT_TAGS pt ON p.ID = pt.PRODUCT_ID
 JOIN TAGS t ON pt.TAG_ID = t.ID AND
      t.ID IN (1, 23, 54)

我假设列名。我认为列名是直截了当的,您可以轻松使用列名。如果您需要更多说明,请告诉我。