我有一个SQL-select:
SELECT
p.id,
COUNT(a.id)
FROM Person p
LEFT JOIN Account a
ON a.person_id = p.id
WHERE p.id = 1
GROUP BY p.id;
它工作正常。但是如果我在左表上添加一个条件,那么这个查询将不返回任何行而不是零计数:
SELECT
p.id,
COUNT(a.id)
FROM Person p
LEFT JOIN Account a
ON a.person_id = p.id
WHERE p.id = 1 AND a.state = '0'
GROUP BY p.id;
如果没有结果,如何在左表上添加返回0计数的条件?
答案 0 :(得分:3)
在LEFT JOIN
中, second 表中的条件需要位于ON
子句中:
SELECT p.id, COUNT(a.id)
FROM Person p LEFT JOIN
Account a
ON a.person_id = p.id AND a.state = '0'
WHERE p.id = 1
GROUP BY p.id;
该规则非常简单。 LEFT JOIN
保留第一个表中的所有行,即使第二个表中没有匹配项也是如此。第二个表中的值变为NULL
。 NULL
值将使条件a.state = '0'
失败。