[英]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.