0

我有 2 张桌子:

1)一个订单表(OrderNumber作为ID)

2) 一个 Items 表,它可以有多行,并且还有一OrderNumber列将每一行与上面的 order 行联系起来。

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

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

4

4 回答 4

3

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

OUTER 处理任何不存在的数据

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

于 2013-05-14T11:03:35.213 回答
1

假设您的Items表主键是Items_Id

SELECT * FROM Orders LEFT JOIN Items USING ( `OrderNumber` ) where Items.Items_Id IS NULL
于 2013-05-14T11:13:03.607 回答
1

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

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

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

CREATE INDEX Idx_Items on Items (OrderNumber);
于 2013-05-14T11:25:56.490 回答
0

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

SELECT * FROM Order WHERE Id NOT IN (SELECT OrderNumber FROM Items)
于 2013-05-14T11:06:20.083 回答