当不在表b中时从表a中选择

时间:2012-10-15 20:34:44

标签: mysql

以下命令使用正确的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'不起作用。

2 个答案:

答案 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'