【问题标题】:Find items that don't have any entries in the link table with MySQL使用 MySQL 查找链接表中没有任何条目的项目
【发布时间】:2013-01-21 19:03:21
【问题描述】:

我有一个items 表和一个tags 表,它们通过user_tags 表链接。我有一个查询可以找到所有带有特定标签的项目:

self::factory('item')
    ->join('user_tags', 'INNER')->on('items.id', '=', 'user_tags.item_id')
    ->join('tags', 'INNER')->on('user_tags.tag_id', '=', 'tags.id')
    ->where('tags.title', 'IN', $array_of_tags);

或没有 kohana orm:

SELECT items.*
FROM items
INNER JOIN user_tags ON items.id = user_tags.item_id
INNER JOIN tags ON user_tags.tag_id = tags.id
WHERE tags.title IN ($array_of_tags);

我想查找所有没有关联标签的项目。我该怎么做?

【问题讨论】:

  • 您有 2 个标签表:标签和用户标签?哪些标签是您不想要的?

标签: mysql kohana-3 kohana-orm


【解决方案1】:

只需添加另一个 where 条件

SELECT 
    items.*
FROM items
LEFT JOIN user_tags ON items.id = user_tags.item_id
LEFT JOIN tags ON user_tags.tag_id = tags.id
WHERE tags.title IN ($array_of_tags)
AND user_tags.tag_id IS NULL;

【讨论】:

    【解决方案2】:

    将你的内连接切换到左连接

    SELECT items.*
    FROM items
    LEFT JOIN user_tags ON items.id = user_tags.item_id
    LEFT JOIN tags ON user_tags.tag_id = tags.id
    WHERE (tags.title IN ($array_of_tags) or tags.title is null)
    and user_tags.item_Id is null.
    

    请记住,SQL 不仅仅是设置逻辑。

    这里有一个链接可以帮助解释不同类型的连接。

    http://www.codinghorror.com/blog/2007/10/a-visual-explanation-of-sql-joins.html

    【讨论】:

      【解决方案3】:

      试试这个::

      SELECT items.*
      FROM items
      LEFT JOIN user_tags ON items.id = user_tags.item_id
      LEFT JOIN tags ON user_tags.tag_id = tags.id
      WHERE 
      user_tags.tag_id is null 
      AND tags.title IN ($array_of_tags)
      

      【讨论】:

      • @raheelshan:感谢您的指点,已更新我的查询...:-)
      猜你喜欢
      • 2013-08-22
      • 1970-01-01
      • 2021-07-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-07-19
      • 1970-01-01
      • 2021-10-14
      相关资源
      最近更新 更多