2013-07-16 129 views
0

选择执行后,我收到了错误“未知列‘点’在‘where子句’删除行时,子查询返回null

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

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 

在此先感谢


解决方案:

我一直在寻找的是HAVING

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 
+0

Reword“防止在子查询上返回空记录”部分,因为删除外查询中包含空值的行是不相同的,因为防止子查询返回空值。 –

+0

重写,希望可以帮助 –

+0

好的,谢谢,我将我的答案与此表单无关。巴马尔的就足够了。 –

回答

2

的问题是,你不能WHERE子句中使用别名SELECT,他们必须在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 
+0

谢谢!我正在编辑我的问题,并在您发布此答案时找到了答案:) –