[英]where not exists in second table
需要在subinv中查找狀態為1的inv中有清單的subinv表中沒有帶有狀態1的列表的記錄。
inv
每個零件號只有一個記錄,但是subinv
可以有多個記錄,其中有多個狀態號之一。 我的語句不返回任何行,不顯示錯誤,但是有符合條件的記錄。
SELECT m.partnum
FROM inv m,
subinv s
WHERE m.status = '1'
AND not exists (SELECT s.partnum
FROM subinv s1
WHERE s1.substatus = '1')
您的外部查詢中有一個笛卡爾積,這不好(特別是因為您無論如何都不想加入),並且需要在EXISTS查詢中指定零件編號:
SELECT m.partnum
FROM inv AS m
WHERE m.status = '1'
AND NOT EXISTS
(SELECT *
FROM SubInv AS s1
WHERE s1.substatus = '1'
AND s1.partnum = m.partnum
);
此功能具有NOT NOTISTS的相關子查詢。 值得檢查過濾后的OUTER JOIN的性能:
SELECT i.partnum
FROM inv AS i
LEFT JOIN subinv AS s ON s.partnum = i.partnum AND s.substatus = '1'
WHERE i.status = '1'
AND s.substatus IS NULL;
當沒有s.substatus = '1'
行時,LEFT JOIN條件將為s.substatus
生成NULL,並且WHERE子句僅選擇此類行。 作為轉換並沒有令人眼花obvious亂,但它可能比子查詢更快,僅是因為它是聯接,而不是必須對主inv
表中的每一行執行的子查詢(滿足status = '1'
)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.