SQL - 选择适用于多行的WHERE

时间:2011-06-30 15:18:09

标签: sql sql-server tsql

我对如何编写此查询甚至如何解释它感到茫然 - 基本上我正在尝试将WHERE子句应用于多行。

我有一张这样的表:

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

我想知道如何获得具有特定问题/答案的所有唯一RuleID。

例如,类似这样的东西,但显然这不会返回结果,因为它检查同一行中的每个where子句。

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

5 个答案:

答案 0 :(得分: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 :(得分:3)

根据问题的编写方式(我不确定反映你真正想要的是什么,你自己承认...)我认为你想要的是:

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

如果不起作用,请澄清。

[编辑]其他人也抓住了“OR”选项,除此之外我注意到你可能会利用的模式。所有'answerID'都是'questionID'吗? (问题XX00的可用答案是XX01,XX02,...... XX99)。如果是这种情况,那么您可以从where子句中删除questionID,因为AnswerID可以假设该值。这可以允许您使用IN子句,如:

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

答案 2 :(得分:1)

我并不是真的关注你,但我认为你想要这样的事情:

select DISTINCT RuleID FROM table 
where QuestionID IN (values)

您还可以在IN caluse中插入另一个选择:

select DISTINCT RuleID FROM table 
where QuestionId in (SELECT ...)

答案 3 :(得分:1)

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

或者我错过了什么?

答案 4 :(得分:1)

这是你要找的东西

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