执行选择后,我收到错误“ where子句中的未知列'points'”

如何从外部查询中删除包含子查询返回的空记录的行? (我需要使用子查询,因为我还有另一堆子查询需要运行以返回我所追求的结果)

SELECT
   s.student_name_first,
   s.student_name_last,
   (
   SELECT sum(i.points)
   FROM incidents i
   WHERE i.student = s.id
   ) AS points
FROM students s
WHERE points IS NOT NULL
GROUP BY s.id


我也尝试过,结果相同

SELECT
   s.student_name_first,
   s.student_name_last,
   (
   SELECT sum(i.points) AS points
   FROM incidents i
   WHERE i.student = s.id AND points IS NOT NULL
   ) AS p
FROM students s
GROUP BY s.id


提前致谢



解:

我一直在寻找

SELECT
   s.student_name_first,
   s.student_name_last,
   (
   SELECT COALESCE(sum(i.incident_points),0)
   FROM incidents i
   WHERE i.student = s.id
   ) as points
FROM students s
GROUP BY s.id
HAVING points > 0

最佳答案

问题是您不能在SELECT子句中使用WHERE别名,它们必须位于HAVING中。

但是,如果使用内部联接,则首先不会获得任何空行。

SELECT s.student_name_first,
       s.student_name_last,
       SUM(i.points) AS points
FROM students s
JOIN incidents i
ON i.student = s.id
GROUP BY s.id

关于mysql - 当子查询返回null时,删除外部查询中的行,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17668622/

10-12 17:31
查看更多