【发布时间】:2012-09-27 21:45:54
【问题描述】:
我有 3 个表:产品、标签和 products_tags(产品和标签之间的多对多)。 在我的架构中,一个产品可以有零到多个标签,一个标签可以有零到多个产品。 现在我想选择有特定标签而没有特定标签的产品。
产品表:
idproducts / 名称
1 / 三星银河
2/三星note1
3/三星note2
4 / iphone 4gs
标签表:
idtags / 单词
1 / 三星
2 / 星系
3 / 注释1
4 / note2
5 / iphone
6 / 4gs
7 / 苹果
Products_Tags 表:
产品/标签
1 / 1
1 / 2
2 / 1
2 / 3
3 / 1
3 / 4
4 / 5
4 / 6
我有下面的查询,但它给了我带有标签的产品,我不想要因为它们有一些其他标签,并且作为连接的结果,它们出现在结果集中。
选择 * FR0M 产品作为 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”。对此的查询是什么?
附:我想也许应该使用 EXISTS 或 NOT EXISTS,但我只是不知道应该如何使用它们。
提前致谢
【问题讨论】: