以下命令从 'stock' 中选择所有出现在 'items' 中且具有正确 orderRef 的项目。
SELECT a.* FROM stock a LEFT JOIN items b ON a.id = b.stockId WHERE b.orderRef='orderRef'
这可行,但我需要所有未在表“项目”中列出的项目以及正确的 orderRef。
我想我应该把“开”改成相反的,但“关”没有用。
以下命令从 'stock' 中选择所有出现在 'items' 中且具有正确 orderRef 的项目。
SELECT a.* FROM stock a LEFT JOIN items b ON a.id = b.stockId WHERE b.orderRef='orderRef'
这可行,但我需要所有未在表“项目”中列出的项目以及正确的 orderRef。
我想我应该把“开”改成相反的,但“关”没有用。
执行“不在”查询的最佳方法是 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 上建立索引来进一步增强。
请注意,当您使用左外连接时,如果第二个表中有重复项,您可能会无意中将行数相乘。
试试这个:
SELECT a.* FROM stock a LEFT JOIN items b ON a.id = b.stockId WHERE
b.stockId is null and a.orderRef='orderRef'