如何在左表中添加条件以包含“零”/“0”会导致COUNT聚合?

时间:2017-11-10 12:14:48

标签: sql group-by left-join

我有一个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计数的条件?

1 个答案:

答案 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保留第一个表中的所有行,即使第二个表中没有匹配项也是如此。第二个表中的值变为NULLNULL值将使条件a.state = '0'失败。