我已经阅读了类似的问题,我认为我这样做是正确的,但我只是想确保我的SQL是正确的。 (还是SQL新手)
我有2张不同的表
Students
id, name, address
Staff
id, name, address
我需要找到学生总数(不是员工)
所以我有以下SQL
create view nstudents as
select students.id
from students
LEFT JOIN staff ON staff.id = students.id;
然后我在视图上运行计数(*)。
有人可以确认我的SQL是正确的还是有更好的方法来做到这一点?
答案 0 :(得分:1)
您的LEFT JOIN
并没有消除同时也是员工的学生,但它可能有助于实现您的目标。 LEFT JOIN
为您提供左表中的所有结果以及右表中的匹配结果,如果右表没有匹配,则为NULL
结果。如果你这样做:
select count(*)
from students
LEFT JOIN staff ON staff.id = students.id
WHERE staff.id IS NULL;
我希望你能得到你正在寻找的东西。
答案 1 :(得分:0)
你可能会发现做这样的事情更自然:
create view nstudents as
select s.id
from students s
where not exists (select 1 from staff st where st.id = s.id) ;
这应该与left join
具有相同的效果。