查找第二个表中缺少的记录

时间:2015-03-10 11:43:51

标签: mysql sql

我有一个关于更有效的SQL查询的问题,它将从驱动表中选择记录,这在第二个表中是缺失的。表有超过23k行,连接时间太长。

有没有办法让它更快?据我所知,以下查询遍历整个表

我用过

SELECT * FROM orders
JOIN orderID USING(Order_id)
WHERE orderID != Order_id

2 个答案:

答案 0 :(得分:1)

您想使用left join。它看起来像这样:

SELECT o.*
FROM orders o LEFT JOIN 
     SecondTable st
     ON o.orderID = st.Order_id
WHERE st.Order_id IS NULL;

我发现第二个表不太可能被称为Order_id,所以我在这个查询中称它为SecondTable。您可能不需要不存在的记录中的列,因此我将它们限制为第一个表中的列。

答案 1 :(得分:0)

您正在生成两个表的笛卡尔积。你想要的是使用适当的where子句来定期LEFT JOIN:

SELECT * FROM orders
JOIN orderID USING(Order_id)
ON orders.orderID = orderID.Order_id
WHERE orderID.Order_id IS NULL;