繁体   English   中英

如何在MySQL中基于另一个表中的不匹配项从一个表中进行选择

[英]how can I select from one table based on non matches in another in mySQL

我有两张桌子

项目:ID,名称

类别:items_id,类别

我需要选择ID不在“类别”表中的所有项目。

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

尝试这个:

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

不在(选择CATEGORIES.item_id)

不知道这是否比上面的连接要快...但是可以。

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

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

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

怎么样

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM