1

私たちのアプリはしばらくの間このクエリを使用しています:

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行を返し、2番目の(おそらく同一の)クエリは586行を返します。これは左外側結合の有効な使用法ではありませんか?

このクエリを書き直すためのより良い方法は何でしょうか?

ありがとうございました!

4

2 に答える 2

4

次のクエリは、最初のクエリと同じ結果を返すはずです。

SELECT invoice.id 
FROM invoice 
LEFT OUTER JOIN invoice_transaction 
             on invoice.id = invoice_transaction.invoice_id
WHERE invoice_transaction.invoice_id IS NULL
于 2012-11-05T23:52:27.167 に答える
0

最善の方法はこれです

SELECT id 
FROM invoice as i
WHERE not exists
(SELECT invoice_id FROM invoice_transaction as it where it.invoice_id=i.id ) 
于 2012-11-06T00:12:55.120 に答える