代码之家  ›  专栏  ›  技术社区  ›  Yevgeny Simkin

在MySQL中,如何根据不匹配项从一个表中进行选择

  •  1
  • Yevgeny Simkin  · 技术社区  · 16 年前

    我有两张桌子

    项目:ID、名称

    类别:项目编号,类别

    我需要选择ID不在Categories表中的所有项目。

    我怀疑这真的很简单,但无法搞清楚语法。

    6 回复  |  直到 16 年前
        1
  •  3
  •   KM.    16 年前

    试试这个:

    SELECT
        i.*
        FROM Items   i
            LEFT OUTER JOIN Categories  c ON i.id=c.items_id
            WHERE c.items_id is NULL
    
        2
  •  3
  •   Yevgeny Simkin    16 年前

    不在(选择类别。项目ID)

    不确定这是否比上面的连接更快…但它有效。

        3
  •  2
  •   Joe Phillips    16 年前
    SELECT * FROM Items
    WHERE id NOT IN (SELECT items_id FROM Categories)
    
        4
  •  0
  •   Mike Pone    16 年前

    这将从items表中选择所有内容,并且仅从与联接匹配的类别中选择记录。然后过滤掉空值。

    Select Item.Id
    FROM ITEMS LEFT OUTER JOIN CATEGORIES On
    Items.Id = Categories.items_id
    where categories.items_id is null
    
        5
  •  0
  •   James Conigliaro    16 年前

    怎么样

    SELECT id
    , name
    FROM ITEMS
    WHERE NOT EXISTS(SELECT 1 FROM CATEGORIES WHERE Categories.items.id = ITEMS.id)
    

    这将仅返回在“类别”表中没有至少一个条目的项目

        6
  •  0
  •   Paul Morgan    16 年前
    SELECT items.id
      FROM items
     WHERE NOT EXISTS( SELECT *
                         FROM categories
                        WHERE items.id = categories.items.id )
    

    这与加入类别表的方式相同,如Mike Pone和KM所列,但我发现这更具可读性。