我有三個相關的表(學生,班級,招生)(一個學生可以有多個註冊,一個班級可以有多個註冊),我需要從中選擇所有註冊班級的學生(x,y,z),但不在類(a,b,c)中。我怎樣才能構建我的查詢來實現這一目標?SQL Select:同一個表的子集
0
A
回答
1
我不同意我們需要更多的信息才能說實話。像這樣的東西應該工作。另一種方法是使用關鍵字MINUS
來獲得第一個查詢(類x,y和z中的學生)的所有結果,但第二個查詢(類a,b和c中的學生)的結果除外。
選擇所有x,y和z類以及類別a,b和c中的所有類的所有學生。
SELECT * FROM Students s
WHERE EXISTS (SELECT * FROM Enrollment
WHERE studentId = s.StudentId AND ClassId = 'x')
AND EXISTS (SELECT * FROM Enrollment
WHERE studentId = s.StudentId AND ClassId = 'y')
AND EXISTS (SELECT * FROM Enrollment
WHERE studentId = s.StudentId AND ClassId = 'z')
AND NOT EXISTS (SELECT * FROM Enrollment
WHERE studentId = s.StudentId AND ClassId IN ('a', 'b', 'c')
1
應該DDL(只引進名):
create table student (s_id numeric, name varchar);
create table class (c_id numeric, name varchar);
create table enrollment (s_id numeric, c_id numeric);
學生選擇id,而不是在A,B或C
select s_id from enrollments where c_id not in (select c_id from class where name in ('a', 'b', 'c');
選擇學生的IDS x,y或z
select s_id from enrollments where c_id in (select c_id from class where name in ('x', 'y', 'z');
結合起來
select * from students where s_id in (select s_id from enrollments where c_id in (select c_id from class where name in ('x', 'y', 'z') and s_id not in (select s_id from enrollments where c_id in (select c_id from class where name in ('a', 'b', 'c');
相關問題
- 1. 得到一個表的子集在SQL
- 2. 在同一表中的sql select查詢
- 3. 在同一張表上的SQL Multiple Select
- 4. SQL Select已被回覆的最後一個帖子(在同一張表中)
- 5. 從一個SELECT子句中的SQL Server
- 6. 在MS SQL SELECT從表不同的值集的值的
- 7. SQL在同一張表上插入一個foreach select?
- 8. 子集的SELECT DISTINCT
- 9. Sql select語句從同一個表中選擇4個值
- 10. SQL SELECT ID和項目的數量在同一個表
- 11. MySQL的SELECT凡在列表中而不在同一個SQL LIST
- 12. 如何做一個兩個表sql select
- 13. 嵌套sql select在另一個sql select?
- 14. SQL SELECT 3個表
- 15. 來自同一個表的MySQL SELECT子查詢
- 16. 在同一個表上的SELECT中的MYSQL SELECT
- 17. Linq Select主列表的子集
- 18. 父子在同一個表
- 19. 跨兩個表的SQL SELECT
- 20. 的Sql多選擇一個行子組從同一個表
- 21. SQL SELECT WHERE NOT IN從同一個表中查詢
- 22. 中的XQuery SQL:選擇一個子集
- 23. 單SQL SELECT返回從一個錶行
- 24. 從另一個表SQL SELECT查詢
- 25. 使用select子查詢更新列到同一個表
- 26. 加入到同一個表的子集中
- 27. 子集另一個列表
- 28. 從select和dateadd函數插入結果集到同一個表中
- 29. SQL SELECT從相同的表兩次
- 30. 休眠集映射到「SQL SELECT」表
無法給出一個準確的信息,而不架構 – smk