簡體   English   中英

第二個表中不存在的地方

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM