其他列中未找到SQL列值

时间:2015-04-15 02:05:39

标签: sql postgresql

我已经阅读了类似的问题,我认为我这样做是正确的,但我只是想确保我的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是正确的还是有更好的方法来做到这一点?

2 个答案:

答案 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具有相同的效果。