2016-11-14 120 views
0

我正在與下面的SQL查詢語法錯誤:爲什麼我不能在此查詢中組合LEFT OUTER JOIN和WHERE子句?

SELECT COUNT(*) 
from accounts 
WHERE accounts.level = 0 
LEFT OUTER JOIN verifications ON verifications.account_id = accounts.id 
WHERE verifications.account_id IS NULL; 

這裏是我已經嘗試了第二個變化:

SELECT COUNT(*) 
from accounts 
LEFT OUTER JOIN verifications ON verifications.account_id = accounts.id 
WHERE verifications.account_id IS NULL 
WHERE accounts.level = 0; 

我想要做什麼是我要選擇accounts沒有關聯的verifications對象,其級別僅等於0.在我看來,這個查詢對我來說很有意義,但顯然不是。我在這裏做錯了什麼?此外,作爲獎勵,我打算添加更多LEFT OUTER JOINS語句以用組合關聯過濾帳戶表。在這種情況下,需要一個UNION聲明來彙總結果,或者我可以只加載在LEFT OUTER JOIN?幫助將不勝感激。

+6

最後哪來後,所有的連接和客人不願意再說一遍,你insted的使用,如果你有2個或多個條件 – Mihai

+0

採取小步。首先學習INNER JOIN,然後添加WHERE,然後考慮LEFT JOIN。 – jarlh

回答

4

我想要做什麼是我要選擇沒有相關的驗證對象賬戶,其水平只等於0

一個更規範的方式來做到這一點與NOT EXISTS

SELECT COUNT(*) 
from accounts 
WHERE accounts.level = 0 
AND NOT EXISTS(
    SELECT NULL 
    FROM verifications 
    WHERE verifications.account_id = accounts.id) 
3

您只需要一個WHERE語句,如果您需要多個子句,那麼您需要使用運算符AND或OR;

SELECT COUNT(*) 
FROM accounts 
LEFT OUTER JOIN verifications 
    ON verifications.account_id = accounts.id 
WHERE verifications.account_id IS NULL 
    AND accounts.level = 0;