我有两张名为'老师'和'课程'。表'教师'有四列,即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运算符。
答案 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