如何在一个表中选择ID所在的行,而不选择另一个表中的行?

时间:2013-05-14 10:55:36

标签: php mysql select

我有两张桌子:

1)订单表(其中OrderNumber为Id)

2)一个Items表,它可以有多行,并且每行都有一个OrderNumber列连接到上面的ord er行。

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

我可以在我的PHP中对2个查询执行此操作,但显然有更聪明的方法在MySQL中执行此操作。我理解JOINS,但通常是在两个表中都有数据时。如果两者都没有平局,我该如何处理?

4 个答案:

答案 0 :(得分:3)

我将使用LEFT OUTER JOIN或FULL OUTER JOIN,具体取决于您的需要..如果您发布2个查询或某些示例数据,这将有所帮助...

OUTER处理任何不存在的数据

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

答案 1 :(得分:1)

假设您的Items表主键为Items_Id

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

答案 2 :(得分:1)

除了上面列出的方法之外,我会说我会使用这种结构:

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

您还可以在Items中的OrderNumber列上添加索引以获得更好的性能:

CREATE INDEX Idx_Items on Items (OrderNumber);

答案 3 :(得分:0)

您可以使用where NOT IN短语作为where子句。这将获得Id的ID不在Items表中的订单记录。

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