SQL - выбор с помощью WHERE, который применяется к нескольким строкам - PullRequest
3 голосов
/ 30 июня 2011

Я не знаю, как написать этот запрос или даже как его объяснить - в основном я пытаюсь, чтобы предложение 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 ]

3 голосов
/ 30 июня 2011

Исходя из того, как написан вопрос (который, я не уверен, отражает то, что вы «действительно» хотите, по вашему собственному признанию ...) Я думаю, что вы хотите:

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). Если это так, то вы можете удалить questionID из вашего предложения where, так как это значение может быть принято AnswerID. Это может позволить вам использовать предложение IN, например:

select DISTINCT RuleID FROM table 
where AnswerID IN (1105,1205,1305)
3 голосов
/ 30 июня 2011

Попробуйте это простое изменение

select DISTINCT RuleID FROM table 
where (QuestionID=1100 and AnswerID=1105)
or (QuestionID=1200 and AnswerID=1205)
or (QuestionID=1300 and AnswerID=1305)
1 голос
/ 30 июня 2011

Это то, что вы ищете

SELECT DISTINCT RuleID 
FROM table
WHERE QuestionID IN (1100,1200,1300)
1 голос
/ 30 июня 2011
select DISTINCT RuleID FROM table 
where (QuestionID=1100 and AnswerID=1105
or (QuestionID=1200 and AnswerID=1205)
or (QuestionID=1300 and AnswerID=1305)

или я что-то упустил?

1 голос
/ 30 июня 2011

Я на самом деле не слежу за тобой, но я думаю, что ты хочешь что-то вроде этого:

select DISTINCT RuleID FROM table 
where QuestionID IN (values)

, ты также можешь вставить еще один выбор в IN caluse:

select DISTINCT RuleID FROM table 
where QuestionId in (SELECT ...)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...