我有 3 个表:产品、标签和 products_tags(产品和标签之间的多对多)。在我的架构中,一个产品可以有零到多个标签,一个标签可以有零到多个产品。现在我想选择具有特定标签但没有特定标签的产品。
产品表:
idproducts / 名称
1 / 三星银河
2/三星note1
3/三星note2
4 / iphone 4gs
标签表:
身份证/字
1 / 三星
2 / 银河
3/注1
4 /注2
5 / iphone
6 / 4克
7个/苹果
Products_Tags表:
产品/标签
1 / 1
1 / 2
2 / 1
2 / 3
3 / 1
3 / 4
4 / 5
4 / 6
我有下面的查询,但它为我提供了带有我不想要的标签的产品,因为它们有一些其他标签,并且作为连接的结果,它们出现在结果集中。
SELECT * FR0M 产品 AS p
JOIN products_tags AS pt ON pt.product = p.idproducts JOIN tags AS t ON t.idtags = pt.tag WHERE t.word IN ('samsung', 'mobile') AND t.word NOT IN ('note1', 'note2')
如果我想要三星 Galaxy,并且我定义了像“三星”这样的标签,而没有“note1”和“note2”。对此的查询是什么?
PS 我想也许应该使用 EXISTS 或 NOT EXISTS,但我只是无法弄清楚我应该如何使用它们。
提前致谢