以下命令使用正确的orderRef选择“items”中显示的“stock”中的所有项目。
SELECT a.* FROM stock a LEFT JOIN items b ON a.id = b.stockId WHERE b.orderRef='orderRef'
这样可行,但我需要使用正确的orderRef在表'items'中未列出的所有项目。
我认为我应该将'ON'更改为相反,但'OFF'不起作用。
答案 0 :(得分: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上建立索引可以进一步增强这一点。
请注意,当您使用左外连接时,如果第二个表中存在重复项,则可能会无意中将行的nubmer相乘。
答案 1 :(得分:0)
试试这个:
SELECT a.* FROM stock a LEFT JOIN items b ON a.id = b.stockId WHERE
b.stockId is null and a.orderRef='orderRef'