0

我有两个 SQL 表,“产品”和“标签”。它们具有 n:m 关系,使用第三个表“product_tags”。

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

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

4

2 回答 2

5

您可以使用此解决方案。这将获取包含所有关键字 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

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

于 2012-07-10T09:08:26.967 回答
0

试试这个

选择 * 从

 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)

我假设列名。我认为列名很简单,您可以轻松地使用列名。如果您需要更多说明,请告诉我。

于 2012-07-10T09:09:32.937 回答