为什么我不能在此查询中组合LEFT OUTER JOIN和WHERE子句?

时间:2016-11-14 15:39:56

标签: sql postgresql

我遇到以下SQL查询的语法错误:

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对象且其级别仅等于0的verifications。在我看来这个查询对我有意义但很明显不。我在这里做错了什么?另外,作为奖励,我打算添加更多LEFT OUTER JOINS语句来过滤具有组合关联的帐户表。对于这种情况,需要UNION语句来汇总结果,还是我可以在LEFT OUTER JOIN上堆积?帮助将不胜感激。

2 个答案:

答案 0 :(得分: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)

答案 1 :(得分: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;