首页 新闻 赞助 找找看

postgre 连接问题

0
悬赏园豆:20 [待解决问题]

现在有两张表,x_student(id,name),x_course(id,student_id,course)。两张表通过course关联。之前有需求是筛选出没有选择某门课程的学生。通过大家的帮助,已经写好如下:

--不修english的学生
select distinct s.id,s.name

from demo64.x_student s

join demo64.x_course c
on s.id not in
(
select c.student_id
from demo64.x_course c
group by c.student_id
having string_agg(distinct c.course::varchar,',') like '%english%'
)

 

这样写虽然解决了问题,但是如果数据量大了会有效率问题,因为这两个表在join的时候没有加连接。然后改成了on s.id = c.student_id and s.id not in (......)的写法。

但是这个写法会有一个问题,就是如果某个学生一门课都没选,那这个学生就会被筛选掉,就选不出来了。

请教这个应该怎么处理呢?

c00164959的主页 c00164959 | 初学一级 | 园豆:26
提问于:2015-06-04 10:01
< >
分享
所有回答(2)
0

不能加个union么

浅草青晨 | 园豆:904 (小虾三级) | 2015-06-04 10:09
0

select distinct s.id,s.name
from demo64.x_student s
join
(
select distinct s.id,s.name ,c.course
from demo64.x_student s
left join demo64.x_course c
on s.id = c.student_id
) t
on s.id = t.id
and s.id not in (select c.student_id from demo64.x_course c where c.course = 'history')
order by s.id

c00164959 | 园豆:26 (初学一级) | 2015-06-04 10:26
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册