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 的处理方法