gpt4 book ai didi

用于检索不相关记录的元组的 SQL

转载 作者:行者123 更新时间:2023-12-02 08:25:07 24 4
gpt4 key购买 nike

想象这样一个数据库:

test database

并寻找所有学生 - 不共享任何类(class)的教师集。结果应该是一个 (Student.Name - Teacher.Name) 元组。

这个想法接近于解决方案,但并不完全是我们想要的。

--- The students that go to some courses 
SELECT S.FIRSTNAME, S.LASTNAME
FROM STUDENTS S
JOIN STU_COU SC ON S.STUDENTID = SC.STUDENTS_STUDENTID

UNION ALL

--- teachers not in attended courses
SELECT T.FIRSTNAME, T.LASTNAME
FROM TEA_COU TC
JOIN TEACHERS T ON T.TEACHERID = TC.TEACHERS_TEACHERID
WHERE TC.COURSES_COURSEID NOT IN (
SELECT C.COURSEID
FROM STUDENTS S
JOIN STU_COU SC ON S.STUDENTID = SC.STUDENTS_STUDENTID
JOIN COURSES C ON C.COURSEID = SC.COURSES_COURSEID
);

测试数据如:

  • 教师 A 教授计算机科学和数学类(class);
  • 学生 A 参加了 CS 类(class);
  • 学生 B 修读文学和体育类(class);

结果是

STUDENT B - TEACHER A

寻找通用解决方案,这就是为什么没有指定特定数据库的原因。

最佳答案

在 Oracle 中,您可以使用 minus,或者 SQL Server 或 PostgreSQL 的 except 集合运算符:(功能等效)

select s.firstname as stud_fname,
s.lastname as stud_lname,
t.firstname as teac_fname,
t.lastname as teac_lname
from students s
cross join teachers t
minus
select s.firstname,
s.lastname,
t.firstname,
t.lastname
from students s
join stu_cou sc
on s.studentid = sc.students_studentid
join courses c
on sc.courses_courseid
join tea_cou tc
on c.courseid = tc.courses_courseid
join teachers t
on tc.teachers_teacherid = t.teacherid

关于用于检索不相关记录的元组的 SQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32935512/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com