簡體   English   中英

如何在同一個表上查詢不同的條件並加入結果

[英]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

但是,我現在無法檢查此變體以獲得正確的語法。

您的要求不完全清楚,但你可以在你的不同組合可能的條件下whereor

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM