【问题标题】:Filter items from linking table从链接表中过滤项目
【发布时间】:2014-09-01 08:45:19
【问题描述】:

我环顾四周,但似乎无法找到问题的答案。

问题来了: 我有 2 个 mysql 表:项目和标签。我使用第三个表(链接表)将多个标签分配给 1 个项目(请参阅下面的表设计)。

现在我正在尝试设计一个查询,该查询根据链接表中分配的标签过滤项目。对于某些标签,它必须是 AND,对于其他标签,它必须是 OR。例如,我想获取那些分配有标签 1 或(2 和 3)的项目。

项目: +----+-------------+---------+ |身份证 |职称 |信息 | +----+-------------+---------+ | 1 |世界你好 |地址 | +----+-------------+---------+ | 2 |福 |地址 | +----+-------------+---------+ 标签: +----+-------+ |身份证 |姓名 | +----+-------+ | 1 |标签 1 | +----+-------+ | 2 |标签 2 | +----+-------+ | 3 |标签 3 | +----+-------+ | 4 |标签 4 | +----+-------+ 链接表: +----+--------+--------+ |身份证 |物品编号 |标签ID | +----+--------+--------+ | 1 | 1 | 1 | +----+--------+--------+ | 2 | 1 | 2 | +----+--------+--------+ | 3 | 2 | 4 | +----+--------+--------+

我无法提出正确的查询来执行此操作。你能帮忙吗?

【问题讨论】:

    标签: mysql


    【解决方案1】:

    按照你的方式:

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

    【讨论】:

      【解决方案2】:

      这样试试

      加入表格。之后添加您的条件

      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)
      

      【讨论】:

      • 我认为,当您为您的意图添加一些解释时,这对 OP 和更多访问者会更有帮助。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-08-20
      • 2021-02-28
      • 2020-08-31
      • 2013-04-22
      • 1970-01-01
      • 2011-10-25
      • 1970-01-01
      相关资源
      最近更新 更多