从链接表中过滤项目

时间:2014-09-01 08:45:20

标签: mysql

我一直在四处寻找,但我似乎无法找到问题的答案。

问题在于: 我有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 |
    +----+--------+-------+

我无法提出正确的查询。你能帮忙吗?

2 个答案:

答案 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)
)