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