繁体   English   中英

如何选择一个表中存在ID的行,而另一表中没有ID?

[英]How to select rows where the ID exists in one table, but not another?

我有2张桌子:

1)订单表(以OrderNumber作为ID)

2)一个Items表,该表可以具有多行,并且还具有一个OrderNumber列, OrderNumber列将每一行与上面的ord er行绑定在一起。

大多数订单在Items表中有多行-但有些则没有,我需要提取没有关联的Items行的Orders的报告。

我可以在PHP中的2个查询上执行此操作,但是显然有一种更聪明的方法可以在MySQL中执行此操作。 我了解JOINS,但通常是两个表中都有数据时。 如果两者都不存在,我该如何解决?

根据您的需要,我将使用LEFT OUTER JOIN或FULL OUTER JOIN。如果您发布2个查询或一些示例数据,这将有所帮助。

OUTER处理所有不存在的数据

这是一个可以帮助您的链接: http : //www.codinghorror.com/blog/2007/10/a-visual-explanation-of-sql-joins.html

假设您的Items表主键是Items_Id

SELECT * FROM Orders LEFT JOIN Items USING ( `OrderNumber` ) where Items.Items_Id IS NULL

除了上面列出的方法之外,我还说我将使用以下结构:

SELECT * FROM Order where not exists (SELECT NULL FROM Items where OrderNumber = Orders.OrderNumber);

您还可以在Items的OrderNumber列上添加索引,以提高性能:

CREATE INDEX Idx_Items on Items (OrderNumber);

您可以在where子句中使用NOT IN短语。 这将获得“订单”表中没有ID的订单记录。

SELECT * FROM Order WHERE Id NOT IN (SELECT OrderNumber FROM Items)

暂无
暂无

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

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