【问题标题】:Find record which is missing in second table [duplicate]查找第二个表中缺少的记录[重复]
【发布时间】:2015-05-11 20:10:55
【问题描述】:

我有一个关于更高效的 sql 查询的问题,该查询将从驱动表中选择记录,而第二个表中缺少该记录。表的行数超过 23k,连接耗时过长。

有什么方法可以加快速度吗?据我说,以下查询循环遍历整个表

我用过

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

【问题讨论】:

  • 23k 记录不应该使连接变慢,如果连接键被索引。
  • 你试过NOT EXISTS吗?

标签: mysql sql


【解决方案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。您可能不需要不存在记录中的列,因此我将它们限制为第一个表中的列。

【讨论】:

    【解决方案2】:

    您正在生成两个表的笛卡尔积。您想要的是使用适当的 where 子句进行常规 LEFT JOIN:

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

    【讨论】:

      猜你喜欢
      • 2018-08-12
      • 2020-07-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-01-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多