0
我有以下查詢:MySQL NOT IN語法convertible to JOINs?
select full_name, email, users.uid
from
cloudsponge
inner join
`users` on users.uid = cloudsponge.importer_uid
where cloudsponge.email not in (select mail from users)
它按預期工作,但我不知道,我能最後一行轉換爲連接(而不是一個子查詢)。這將是有幫助的,因爲我可以使用我的框架ORM而不是硬編碼SQL進入應用程序。
謝謝!
FYI:我不能告訴你爲什麼,但我一直在兩個不同的數據庫管理員告訴記者,這是不好的做法。我不知道這是否只是因爲他們不喜歡的風格,或者如果優化不喜歡它,或者某些RDBMS的不工作。但他們告訴我使用'not in'或'not exist'技術。 –
@JoeEnos:就個人而言,我不喜歡的風格:'NOT IN'和'NOT EXISTS'都表達真實意圖,而'左JOIN' +'IS NULL'是表達它作爲加入hackish的方式。但是如果你想知道爲什麼那些DBA反對它,你應該問問他們! – ruakh
@JoeEnos,我已經看到了這兩種解決方案更好的表現,但是這取決於很多事情,像RDBMS優化,數據量正在掃描等最佳測試一個給定的情況下,這兩種解決方案。見我的演講[SQL查詢模式,優化](http://www.slideshare.net/billkarwin/sql-query-patterns-optimized)。 –