我一直在四处寻找,但我似乎无法找到问题的答案。
问题在于: 我有2个mysql表:项目和标签。我使用第三个表(链接表)将多个标签分配给1个项目(参见下面的表格设计)。
现在我正在尝试设计一个查询,根据链接表中指定的标记过滤项目。对于某些标签,它必须是AND,对于其他标签,它必须是OR。例如,我想获得分配了标签1或(2和3)的项目。
Items: +----+-------------+---------+ | ID |Title |Info | +----+-------------+---------+ | 1 | Hello world | Address | +----+-------------+---------+ | 2 | Foo | Address | +----+-------------+---------+ Tags: +----+-------+ | ID | Name | +----+-------+ | 1 | Tag 1 | +----+-------+ | 2 | Tag 2 | +----+-------+ | 3 | Tag 3 | +----+-------+ | 4 | Tag 4 | +----+-------+ Linking table: +----+--------+-------+ | ID | ItemID | TagID | +----+--------+-------+ | 1 | 1 | 1 | +----+--------+-------+ | 2 | 1 | 2 | +----+--------+-------+ | 3 | 2 | 4 | +----+--------+-------+
我无法提出正确的查询。你能帮忙吗?
答案 0 :(得分:0)
试试这个
加入表格。之后添加条件
select title from linkingtable l inner join items i on l.itemid-i.id
inner join tag t on l.tagid=t.id where t.id=1 or (t.id=2 and t.id=3)
答案 1 :(得分:0)
按照你的方式:
SELECT *
FROM Items i
WHERE
ID IN (SELECT ItemID FROM Linking WHERE TagID = 1)
OR (
ID IN (SELECT ItemID FROM Linking WHERE TagID = 2)
AND ID IN (SELECT ItemID FROM Linking WHERE TagID = 3)
)