2011-06-30 51 views
3

我對如何編寫此查詢甚至如何解釋它感到茫然 - 基本上我試圖讓WHERE子句適用於多行。SQL - 選擇適用於多行的WHERE

我有一個表像這樣:

RuleID QuestionID AnswerID 
================================= 
1  1100  1105 
1  1200  1205 
1  1300  1305 
2  1100  1105 
2  1200  1206 
2  1300  1305 

我想知道我怎樣纔能有具體的問題/答案都是唯一的RuleIDs。

例如,像這樣的東西,但顯然這不會返回任何結果,因爲它檢查同一行上的每個where子句。

select DISTINCT RuleID FROM table 
where (QuestionID=1100 and AnswerID=1105) 
and (QuestionID=1200 and AnswerID=1205) 
and (QuestionID=1300 and AnswerID=1305) 
+0

對不起,不清楚。 OR語句按照我的問題工作,但是我真正想要得到符合我傳入的所有條件的所有規則,即對我的示例中定義的所有3個問題都有正確答案的規則。所以RuleID 1應該顯示但不是2,因爲它是AnswerID = 1200的不匹配。但是使用OR語句RuleID 2也會顯示。 – TomF

+0

我確實想出了一些似乎可行的事情,但不知道它是否是最好的方法。基本上通過檢查的匹配規則的計數: SELECT \t \t RuleID FROM表 WHERE \t \t(QuestionID = 1100)AND(AnswerID = 1105)OR \t \t(QuestionID = 1200)AND(AnswerID = 1205)OR \t \t(QuestionID = 1300)AND(AnswerID = 1305) GROUP BY RuleID HAVING COUNT(RuleID)= 3 – TomF

回答

3

試試這個簡單的變化

select DISTINCT RuleID FROM table 
where (QuestionID=1100 and AnswerID=1105) 
or (QuestionID=1200 and AnswerID=1205) 
or (QuestionID=1300 and AnswerID=1305) 
1

我真的不跟着你,但我想你想是這樣的:

select DISTINCT RuleID FROM table 
where QuestionID IN (values) 

你也可以插入到另一個選擇IN caluse:

select DISTINCT RuleID FROM table 
where QuestionId in (SELECT ...) 
1
select DISTINCT RuleID FROM table 
where (QuestionID=1100 and AnswerID=1105 
or (QuestionID=1200 and AnswerID=1205) 
or (QuestionID=1300 and AnswerID=1305) 

還是我錯過了什麼?

1

這是諸如此類的事情,你的基於問題的書寫方式尋找

SELECT DISTINCT RuleID 
FROM table 
WHERE QuestionID IN (1100,1200,1300) 
3

(這我不知道反映了你「真的」想,你自己也承認...)我想你想要的是:

select DISTINCT RuleID FROM table 
where (QuestionID=1100 and AnswerID=1105) 
OR (QuestionID=1200 and AnswerID=1205) 
OR (QuestionID=1300 and AnswerID=1305) 

如果這不起作用,請澄清。

其他人也抓住了「或」的選擇,除此之外,我注意到你可能能夠利用的模式。所有'answerID'的範圍是他們的'questionID'嗎? (問題XX00的可用答案是XX01,XX02,... XX99)。如果是這種情況,那麼您可以從where子句中刪除questionID,因爲該值可以由AnswerID假定。這可以允許您使用IN子句,如:

select DISTINCT RuleID FROM table 
where AnswerID IN (1105,1205,1305) 
+0

我上面添加一些意見,以澄清@ woot586 @rockinthesixstring @rodolfo – TomF

+0

另外,是的,我相信一個答案是特別到一個問題,所以這個問題可能會從查詢中刪除。但我認爲你的建議仍然會返回規則2。 – TomF