我有两张桌子,学生和学校。
学生
SocketFactory factory = SSLSocketFactory.getDefault();
学校
stid | stname | schid | status
临时学生的状态可以很多,但永久学生可以schid | schname
。
如何列出没有临时学生的学校名称?
答案 0 :(得分:2)
您可以使用not exists
仅选择没有临时学生的学校:
select * from school s
where not exists (
select 1 from student s2
where s2.schid = s.schid
and s2.status is not null
)
答案 1 :(得分:2)
使用Conditional Aggregate
,您可以计算每个permanent student
中school
的数量。
如果学校的总数与学校的条件数相同,那么学校没有temporary students
。
使用JOIN
SELECT sc.schid,
sc.schname
FROM student s
JOIN school sc
ON s.schid = sc.schid
GROUP BY sc.schid,
sc.schname
HAVING( CASE WHEN status IS NULL THEN 1 END ) = Count(*)
使用EXISTS
SELECT sc.schid,
sc.schname
FROM school sc
WHERE EXISTS (SELECT 1
FROM student s
WHERE s.schid = sc.schid
HAVING( CASE WHEN status IS NULL THEN 1 END ) = Count(*))
答案 2 :(得分:0)
您可以使用常规联接。
SELECT DISTINCT c.schName
FROM Students s
INNER JOIN Schools c ON s.schid = c.schid
WHERE s.status IS NULL