在语句中不是NULL

时间:2014-05-29 12:21:08

标签: sql-server database jdbc

我有两张名为'老师'和'课程'。表'教师'有四列,即teacher_id,teacher_name,teacher_work_hours和course_id。表'课程'有两列,即course_id和course_name。我想从表格'老师'中选择两列。并计算表格中的实例数量'为teacher.course_id = course.course_id。查询应丢弃表课程的计数()为零的行,即计数()为零的行不应显示在结果集中。我怎么做? 我有这个问题。

select t.teacher_name, t.teacher_work_hours, (select count(*) 
                     from course where course_id = t.course_id
                     having count(*) > 0) as COURSES 
from teacher t 
where teacher_work_hours > 5 
  AND COURSES IS NOT NULL

查询不正确,因为它不允许我在COURSES上放置IS NOT NULL运算符。

2 个答案:

答案 0 :(得分:0)

ROLES是一个表而不是一个列,无论如何它只出现在子查询中。这会不会更有意义吗? (这仍然不起作用,因为你不能在WHERE子句中使用别名,但它更接近于有意义。)

SELECT name, class, (SELECT COUNT(*)
                     FROM xyz
                     -- HAVING COUNT(*) > 0
                         -- Doesn't make sense without a GROUP BY
                     ) AS ROLES
FROM abc
WHERE class > 5
  AND ROLES IS NOT NULL

我认为这不是你真正想做的事情,因为子查询不依赖于abc的当前行。您可能需要更改查询以使用连接和GROUP BY而不是子查询。

答案 1 :(得分:0)

查询不明确。但我只是想分享以下查询供您参考。请检查查询是否有用...

SELECT class, ROLES.Total
FROM   abc 
CROSS APPLY
(SELECT COUNT(*) AS Total FROM xyz WHERE abc.class = xyz.class) ROLES
WHERE  class > 5