MySQL - 替换 LEFT JOIN 代替 NOT IN

Posted

技术标签:

【中文标题】MySQL - 替换 LEFT JOIN 代替 NOT IN【英文标题】:MySQL - replace LEFT JOIN inplace of NOT IN 【发布时间】:2014-04-17 16:35:54 【问题描述】:

在三个表之间使用两个 LEFT JOIN 的正确 mysql 查询是什么?

SELECT COUNT(1) FROM TABLE1 WHERE T1_ID NOT IN ( 
SELECT T2.T2_ID FROM TABLE2 T2 LEFT JOIN 
TABLE3 T3 ON T2.T2_ID=T3.T3_ID WHERE T3.T3_ID IS NULL )

有点像

SELECT COUNT(1) FROM TABLE1 T1 LEFT JOIN TABLE2 T2 ON T1.T1_ID=T2.T2_ID 
LEFT JOIN TABLE3 T3 ON T2.T2_ID=T3.T3_ID WHERE T2.T2_ID IS NULL AND 
T3.T3_ID IS NULL

【问题讨论】:

【参考方案1】:

为了表现,我会做类似的事情

SELECT 
  COUNT(1) 
FROM 
  TABLE1 

  LEFT JOIN (
    SELECT 
      T2.T2_ID id
    FROM
      TABLE2 T2 

      LEFT JOIN TABLE3 T3 ON 
        T2.T2_ID=T3.T3_ID 
    WHERE 
      T3.T3_ID IS NULL
    ) t1 ON
    t1.id = table1.t1_id
WHERE
  t1 is null;

【讨论】:

感谢瑞恩。我已经考虑过上面的查询,它提供了良好的性能优势。我正在寻找没有子查询的查询,它可以提供更多的性能优势。

以上是关于MySQL - 替换 LEFT JOIN 代替 NOT IN的主要内容,如果未能解决你的问题,请参考以下文章

mysql left join 多条记录 1:n 的处理方法

mysql left join 左连接查询关联n多张表

mysql left join 左连接查询关联n多张表

用Left join代替not in

SQL Server 在视图查询中将 LEFT JOIN 替换为 LEFT OUTER JOIN

mysql的表连接( left | right )join