現在有兩個表學生(sid,姓名)和當然(cid,姓名),這種關係是多對多的。因此,還有另一張表student_course(sid,cid),它存儲關於哪些課程由誰選擇的信息。獲取所有學生選擇的課程
如何編寫可以獲得所有學生選擇的課程的sql?
現在有兩個表學生(sid,姓名)和當然(cid,姓名),這種關係是多對多的。因此,還有另一張表student_course(sid,cid),它存儲關於哪些課程由誰選擇的信息。獲取所有學生選擇的課程
如何編寫可以獲得所有學生選擇的課程的sql?
標準溶液:用NOT EXISTS (... NOT EXISTS (...))
結構:
SELECT * FROM course c
WHERE NOT EXISTS (
SELECT * from student s
WHERE NOT EXISTS (
SELECT * from student_course cs
WHERE cs.sid = s.sid
AND cs.cid = c.cid
)
)
;
該查詢往往更快(給出appropiate指標),比參加count() == count()
變體。原因爲此:您不必計數全部的(不同)記錄;一旦你找到了一個學生,做不採取這當然你也可以省略這個當然從嫌疑人的名單。此外:反連接往往可以利用索引[所以可以計數(),但仍然必須計數所有索引中的(不同的)鍵值]
我喜歡我的答案。不過,我更喜歡你的。在同一小提琴中運行時,它也會表現得更好。所以有一個投票 – pinkfloydx33 2014-09-13 17:13:28
Select c.cid, c.name
From course c where
(select count(1) from student) = (select count(1) from student_course sc where sc.cid = c.cid);
它發現,其中在student_course表當然條目的數量的學生人數相匹配的所有課程
CID NAME
1 Test Course1
4 Test Course4
好的沒有問題兄弟,它發生 – Skynet 2014-09-13 15:26:00