如何在mySQL中根据另一个表中的非匹配选择一个表

时间:2009-06-09 20:11:43

标签: mysql

我有两张桌子

ITEMS:id,name

类别:items_id,category

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

我怀疑这很简单,但无法弄清楚语法。

6 个答案:

答案 0 :(得分:3)

试试这个:

SELECT
    i.*
    FROM Items   i
        LEFT OUTER JOIN Categories  c ON i.id=c.items_id
        WHERE c.items_id is NULL

答案 1 :(得分:3)

NOT IN(选择CATEGORIES.item_id)

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

答案 2 :(得分:2)

SELECT * FROM Items
WHERE id NOT IN (SELECT items_id FROM Categories)

答案 3 :(得分:0)

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

Select Item.Id
FROM ITEMS LEFT OUTER JOIN CATEGORIES On
Items.Id = Categories.items_id
where categories.items_id is null

答案 4 :(得分:0)

怎么样

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

这只会带回在类别表中没有至少一个条目的项目

答案 5 :(得分:0)

SELECT items.id
  FROM items
 WHERE NOT EXISTS( SELECT *
                     FROM categories
                    WHERE items.id = categories.items.id )

这与加入类别表一样,如Mike Pone和KM所列,但我觉得这更具可读性。