【发布时间】:2012-11-05 23:47:51
【问题描述】:
我们的应用使用这个查询已经有一段时间了:
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 行。这不是对左外连接的有效使用吗?
重写此查询的更好方法是什么?
谢谢!
【问题讨论】:
-
它们完全不同。了解SQL joins:您可以使用过滤器
WHERE invoice_transaction.invoice_id IS NULL使第二个等效于第一个。 -
这个位置的维恩图似乎表明左外连接是我正在寻找的。 khankennels.com/blog/index.php/archives/2007/04/20/…
-
现在想想,这似乎很明显。再次感谢。 :)
标签: mysql sql join query-optimization outer-join