0

以下命令从 'stock' 中选择所有出现在 'items' 中且具有正确 orderRef 的项目。

SELECT a.* FROM stock a LEFT JOIN items b ON a.id = b.stockId WHERE b.orderRef='orderRef'

这可行,但我需要所有未在表“项目”中列出的项目以及正确的 orderRef。

我想我应该把“开”改成相反的,但“关”没有用。

4

2 回答 2

1

执行“不在”查询的最佳方法是 MySQL,如下所示:

select s.*
from stock s
where not exists (select 1 from items i where s.id = i.stockID and i.orderref = 'orderref' limit 1)

MySQL 优化器的工作方式,not exists性能最好。这可以通过在 items.stockID 上建立索引来进一步增强。

请注意,当您使用左外连接时,如果第二个表中有重复项,您可能会无意中将行数相乘。

于 2012-10-15T20:43:42.947 回答
0

试试这个:

SELECT a.* FROM stock a LEFT JOIN items b ON a.id = b.stockId WHERE 
                b.stockId is null and a.orderRef='orderRef'
于 2012-10-15T20:37:28.827 回答