![](/img/trans.png)
[英]How to query same table with same parameter but with different where conditions and get combined result at last
[英]how to query different where conditions on same table and joining result
我有表問題庫,我想根據不同的條件提取問題,例如
(SELECT unit, Subject, Question, OptionA, OptionB, OptionC, OptionD , CorrectAnswer, marks
FROM questionbank
WHERE Department = "DCP"
and Subject = "CO"
and Unit = "1"
and marks = "1" LIMIT 3)
UNION (SELECT unit,Subject,Question,OptionA ,OptionB ,OptionC ,OptionD ,CorrectAnswer,marks
FROM questionbank
WHERE Department ="DCP"
and Subject="CO"
and Unit="1"
and marks ="2" LIMIT 1 )
我有6個單位,標記是1,2,3或4.並且限制由用戶指定。 這將是傳統聯盟方式中的安靜大查詢。 如何以簡單方便的方式做到這一點?
在此查詢中,只有單位(1到6),標記(1到4)和限制是可變的。
沒有數據示例很難理解最終目標,但我認為以下變體之一可能很有用。
使用IN
運算符
如果Department和Subject是常量值,則可以使用IN
運算符:
SELECT unit, Subject, Question, OptionA, OptionB, OptionC, OptionD, CorrectAnswer, marks
FROM questionbank
WHERE Department = "DCP" and Subject = "CO" and Unit IN ("1", "2", "3", "4", "5", "6") and marks IN ("1", "2", "3", "4")
不同的部門和主題
SELECT unit, Subject, Question, OptionA, OptionB, OptionC, OptionD, CorrectAnswer, marks
FROM questionbank
WHERE
(Department = "DCP" and Subject = "CO" and Unit = "1" and marks = "1")
OR (Department = "XXX" and Subject = "YY" and Unit = "2" and marks = "3")
OR ...
或者您可以使用其他一些類似於上述兩種方法之一的方法。
首先,您需要自己決定這四個參數(部門,主題,單位和標記)如何與其他參數相關聯。 然后,找到最佳解決方案會容易得多。
更新:
對於每個標記的不同限制,我想可以使用這樣的東西:
SELECT unit, Subject, Question, OptionA, OptionB, OptionC, OptionD, CorrectAnswer, marks
FROM questionbank
WHERE Department = "DCP" and Subject = "CO" and Unit IN ("1", "2", "3", "4", "5", "6") and marks = "1"
LIMIT 1
UNION ALL
SELECT unit, Subject, Question, OptionA, OptionB, OptionC, OptionD, CorrectAnswer, marks
FROM questionbank
WHERE Department = "DCP" and Subject = "CO" and Unit IN ("1", "2", "3", "4", "5", "6") and marks = "2"
LIMIT 2
UNION ALL
SELECT unit, Subject, Question, OptionA, OptionB, OptionC, OptionD, CorrectAnswer, marks
FROM questionbank
WHERE Department = "DCP" and Subject = "CO" and Unit IN ("1", "2", "3", "4", "5", "6") and marks = "3"
LIMIT 3
UNION ALL
SELECT unit, Subject, Question, OptionA, OptionB, OptionC, OptionD, CorrectAnswer, marks
FROM questionbank
WHERE Department = "DCP" and Subject = "CO" and Unit IN ("1", "2", "3", "4", "5", "6") and marks = "4"
LIMIT 4
但是,我現在無法檢查此變體以獲得正確的語法。
您的要求不完全清楚,但你可以在你的不同組合可能的條件下where
有or
像
SELECT unit, Subject, Question, OptionA, OptionB, OptionC, OptionD , CorrectAnswer, marks
FROM questionbank
WHERE Department = "DCP" and Subject = "CO" and (
(Unit = "1" and marks = "1") OR
(Unit = "2" and marks = "3") OR
/* ... */
(Unit = "6" and marks = "4")
)
LIMIT 3
MySQL的優點在於它非常靈活,即使有多個表達式,IN子句也可以運行匹配。 我無法找到關於我要解釋的功能的好文檔,但我會盡力簡單地說明。
所以通常的IN子句就是這樣的:
SELECT
column1,column2,...
FROM
table_name
WHERE
(expr|column_1) IN ('value1','value2',...);
但您可以修改IN子句表達式以使用所需數量的表達式:
SELECT
column1,column2,...
FROM
table_name
WHERE
((expr1|column_1),(expr2|column_2),..) IN (('value1','value2'), ('value3','value4')...);
我有一個簡單的SQLFiddle來證明這一點。
因此,為了簡單回答您的問題,您可以像這樣修改您的查詢以實現您想要的而不會過度使用UNION
查詢您的查詢。
SELECT unit, Subject, Question, OptionA, OptionB, OptionC, OptionD , CorrectAnswer, marks
FROM questionbank
WHERE Department = "DCP"
and Subject = "CO"
and (Unit, marks) IN ((1,1), (1,2), (2,3), .. , (6,4))
LIMIT 3
我總是在我的查詢中使用它,但沒有看到很多人使用它。 我發現它是處理WHERE
子句中配對組合的最佳方法。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.