我有一些領域和樣本記錄數據庫表通過如下圖所示:SQL - 讓學生誰在所有科目
Name Test Result Other_fields
A English P x
B Maths F x
C English P x
B English P x
A Maths F x
D English P x
C Biology F x
A Biology P x
B Biology F x
現在的實際表中包含了很多各種各樣的測試。
我想要達到的是找到一個學生的數量/列表(以及其他字段中對於學生來說唯一的相應數值,例如他的年齡,性別等)誰通過了所有在逗號中指定的測試 - 分隔字符串。該字符串顯然是在運行時插入到查詢中的。
現在,如果它是一個固定數量的測試說2個測試或3個測試,那麼我可以爲它寫一個查詢。
但真正的問題是CSV字符串中的測試數量不固定。
有什麼辦法可以實現這個目標嗎?如果有人計劃提出一個涉及使用SQL IN的答案,我可以用一些唯一的數字替代測試名稱(作爲測試ID)。
編輯
顯然,我沒有讓自己很清楚。該表將包含大量測試的記錄(比如test1,test2,... test100)。 CSV字符串將包含一些測試(例如2或3或4,但絕對超過1)。而且我希望學生在通過CSV字符串指定的所有測試中通過的數據。
EDIT 2
可以有對應於學生的一個組合和測試(多次及格和不及格)
你從哪裏得到CSV字符串?如果測試名稱中包含逗號,會發生什麼情況?您應該避免使用CSV字符串進行編碼。如果這不可能,那麼在嘗試使用它來查詢Oracle之前,應該解析它。 –
用戶可以多次進行一次測試嗎?如果是的話,那麼如果他至少失敗了一次,那麼這個學生是否應該被包括進來?如果您有測試要通過單獨的表格,並且您需要檢查學生是否至少通過了一次這些測試,那麼解決方案非常簡單。 –