我用一个子查询编写了一个SQL查询来包含计数。当计数为 0 时,我尝试过滤掉 0,它将 0 变为 NULL 并保留行,反之亦然。结果是我无法过滤掉 0,这是包含计数的目的。
SELECT distinct
a
,b
,
(SELECT
count(id)
FROM seq_stud
WHERE scs.SequenceID = seq_stud.SequenceID
and seq_stud.EndDate is null
HAVING count(id) <> 0
) As t1
FROM sp
INNER JOIN p on sp.ProgramID = p.ProgramID
...etc.
有谁知道为什么会发生这种情况以及如何过滤掉 0 计数?
您不会在 SELECT
子句中进行筛选。 如果您不希望seq_stud
中没有匹配的行,请使用 WHERE
:
WHERE EXISTS (SELECT 1
FROM seq_stud ss
WHERE scs.SequenceID = ss.SequenceID and ss.EndDate is null
)
我会完全删除 HAVING 语句。 您需要将其放在 WHERE 子句中。 否则,它将返回 null,如您所发现的。
SELECT distinct a, b,
(SELECT count(id)
FROM seq_stud
WHERE scs.SequenceID = seq_stud.SequenceID
and seq_stud.EndDate is null
) As t1
FROM sp
INNER JOIN p on sp.ProgramID = p.ProgramID
WHERE t1 > 0
我刚刚想通了。Select 子查询应作为 WHERE 语句包含在内
在存在子句中使用 count((