2011-12-09 170 views
2

轉化下面的查詢(子查詢使用)轉化子查詢INNER JOIN

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」和「<>」。我可以實現類似的功能嗎?

+0

我編輯了我的答案。希望現在好一點。 –

+0

你有沒有試過我的答案?它按照你想要的方式工作嗎? –

回答

-1

試試這個:

SELECT * 
FROM t1 
LEFT OUTER JOIN t2 
ON t1.a = t2.b 
WHERE t2.b IS NULL OR t2.c = 1 

編輯:我不小心寫INNER加入。抱歉;它應該是左外部加入。