【发布时间】:2016-06-21 17:23:54
【问题描述】:
我有一个带有产品名称和 ID 的表“产品”:
id | title
1 product 1
2 product 2
每个产品都可以有一系列标签。标签在“属性”表中标识:
id | name | handle
1 Tag One tag-one
2 Tag Two tag-two
3 Tag Three tag-three
4 Tag Four tag-four
etc
产品到标签的关系是另一个表“标签”:
id | AttId | OwnerId
1 1 1
2 2 1
3 1 2
4 3 2
etc
好的,所以我正在尝试选择一组都具有至少一个特定标签的产品,以及可能选择的其他标签。这是我现在正在使用的:
SELECT products.id
FROM products
WHERE
EXISTS
(
SELECT 1
FROM Tags
INNER JOIN Attributes ON tags.AttId = Attributes.id
WHERE Attributes.handle = 'tag-one'
AND (
Attributes.handle = 'tag-two'
OR
Attributes.handle = 'tag-four'
)
AND products.id = Tags.OwnerId
)
如果我删除 AND (OR) 部分,则查询有效。如上,它没有显示错误,但也没有结果;我应该怎么写才能得到一组肯定有一个标签的产品,并且标签句柄有一个/或其他指定的标签?
【问题讨论】: