簡體   English   中英

簡化查詢(使用左外連接)

[英]Simplifying a query (with left outer join)

我們的應用程序已使用此查詢一段時間了:

SELECT id 
FROM invoice 
WHERE id NOT IN 
(SELECT invoice_id FROM invoice_transaction) 

#437 rows returned

在代碼審查中,此查詢使用左外連接重寫:

SELECT invoice.id 
FROM invoice 
LEFT OUTER JOIN invoice_transaction on invoice.id=invoice_transaction.invoice_id 

#586 rows returned

第一個查詢返回437行,第二個(假設相同)查詢返回586行。 這不是左外連接的有效用法嗎?

什么是重寫此查詢的更好方法?

謝謝!

以下查詢應返回第一個查詢的相同結果:

SELECT invoice.id 
FROM invoice 
LEFT OUTER JOIN invoice_transaction 
             on invoice.id = invoice_transaction.invoice_id
WHERE invoice_transaction.invoice_id IS NULL

最好的方法就是這樣

SELECT id 
FROM invoice as i
WHERE not exists
(SELECT invoice_id FROM invoice_transaction as it where it.invoice_id=i.id ) 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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