我有两张桌子:
1)订单表(其中OrderNumber
为Id)
2)一个Items表,它可以有多行,并且每行都有一个OrderNumber
列连接到上面的ord er行。
大多数订单在Items表中有多行 - 但有些订单没有,我需要提取没有关联商品行的订单报告。
我可以在我的PHP中对2个查询执行此操作,但显然有更聪明的方法在MySQL中执行此操作。我理解JOINS,但通常是在两个表中都有数据时。如果两者都没有平局,我该如何处理?
答案 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)