我不确定要在标题中加上什么。我有一个
SCHOOL
表,带有:
id,
name,
type_id
列。
SCHOOL_STUDENT
表,其中:
school_id,
student_id
列
和一个SCHOOL_TYPE
表,
id,
name
列。
学生可以在多所学校注册。一所学校只能是一种类型。给我一个学生,我想检查他/她是否入学了仅类型(高学校)类型的学校,而没有其他学校。我想检查学生是否入学了仅类型(高学校)类型的学校,而没有其他学校。如果一个学生入读了两所学校,其中一所是高中,其中一所是技术学校,那么我想要一些否定的指示。如果这两所学校都是高中,我希望有积极的迹象。假设SCHOOL_TYPE的一行ID为3,名称为“ high school”。
样本数据:
学校表格 id:name:type_id
1:'abc school':3
2:'xyz school':4
3:'HEH school':3
SCHOOL_TYPE表 id:名称
1:'junior school'
2:'tech school'
3:'High school'
SCHOOL_STUDENT表: school_id:学生编号
1,123
3,123
2, 56
3, 56
请参阅学生ID:123被两所学校注册,其ID:1和ID:3。这些学校都是类型:3,这意味着我想要成功的结果。如果同一名学生注册的学校不止一所,而这些学校也属于其他类型(typeID:3除外),那么我想失败。
学生ID:123的预期输出为“是”,而学生ID:56的预期输出为“否”,因为他在两所学校就读,其中一所不是高中。
我正在尝试此操作,但我知道它缺少某些东西,但是缺少它,我似乎无法解决。
select
bc.customer_id, bt.name, count(bt.[name])
from
school_type st
join school s on s.type_id = st.id
join school_student ss on ss.school_id = s.id
where
ss.student_id = 1234
group by
ss.student_id, st.name
可以使用HAVING吗?还是CASE?
问题已更新:
答案 0 :(得分:0)
您可以将关联子查询与not exists
select
ss.student_id, st.name, count(bt.[name])
from
school_type st join school s on s.type_id = st.id
join school_student ss on ss.school_id = s.id
where
ss.student_id = 1234 and not exists (select 1 from school s1 where ss.school_id = s1.id and s1.type_id<>3)
group by
ss.student_id, st.name
答案 1 :(得分:0)
这是最少的查询。如有必要,请与school_type
表联接:
SELECT school_student.student_id
, CASE WHEN COUNT(DISTINCT school.type_id) = 1 THEN 'Exactly one type' ELSE 'Multiple types' END
FROM school_student
JOIN school ON school_student.school_id = school.id
WHERE school_student.student_id = 123
GROUP BY school_student.student_id