将子查询转换为INNER JOIN

时间:2011-12-09 17:55:20

标签: mysql subquery

转换以下查询(使用子查询)

SELECT * 
FROM t1
WHERE t1.a IN (SELECT t2.b FROM t2 where t2.c = 1)

..使用INNER JOIN进行此查询

SELECT *
FROM t1
INNER JOIN t2
ON t1.a = t2.b AND t2.c = 1

我可以获得良好的性能提升(在http://spin.atomicobject.com/2011/03/25/mysql-in-query-performance学习)

但是这样的查询怎么样:

SELECT * 
FROM t1
WHERE t1.a NOT IN (SELECT t2.b FROM t2 where t2.c <> 1)

请注意“NOT IN”和“&lt;&gt;”。我能实现类似的目标吗?

1 个答案:

答案 0 :(得分:-1)

试试这个:

SELECT *
FROM t1
LEFT OUTER JOIN t2
ON t1.a = t2.b
WHERE t2.b IS NULL OR t2.c = 1
编辑:我不小心写了 INNER 加入。抱歉;它应该 LEFT OUTER 加入。