我遇到以下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
上堆积?帮助将不胜感激。
答案 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;