簡體   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