Проверьте, совпадают ли несколько записей с набором значений - PullRequest
5 голосов
/ 03 апреля 2012

Есть ли способ написать один запрос, чтобы проверить, совпадает ли набор строк с набором значений? У меня есть одна строка на набор значений, которые мне нужно сопоставить, и я хотел бы знать, все ли строки совпадают или нет. Я мог бы выполнить это с помощью нескольких запросов, таких как:

select * from tableName where (value1, value2) = ('someValue1', 'someValue2')
select * from tableName where (value1, value2) = ('someOtherValue1', 'someOtherValue2')

... и так далее, до произвольного числа запросов. Как можно переписать подобные вещи в виде одного запроса, если запрос возвращается ТОЛЬКО, если все значения совпадают?

Ответы [ 3 ]

2 голосов
/ 03 апреля 2012

Вы можете попробовать что-то вроде:

select t.* 
from tableName t
join (select 'someValue1' value1, 'someValue2' value2 union all
      select 'someOtherValue1', 'someOtherValue2') v
  on t.value1 = v.value1 and t.value2 = v.value2
where 2=
(select count(distinct concat(v1.value1, v1.value2))
 from (select 'someValue1' value1, 'someValue2' value2 union all
       select 'someOtherValue1', 'someOtherValue2') v1
 join tableName t1
   on t1.value1 = v1.value1 and t1.value2 = v1.value2)

Если у вас есть большое количество пар значений, которые вы хотите проверить, может быть проще вставить их во временную таблицу и использовать временную таблицу вПриведенный выше запрос вместо двух отдельных жестко закодированных виртуальных таблиц.

2 голосов
/ 03 апреля 2012

А как же:

SELECT * 
FROM tableName 
WHERE value1 IN ('someValue1', 'someOtherValue1') AND 
      value2 IN ('someValue2', 'someOtherValue2')
0 голосов
/ 25 октября 2018

Совпадение, если найдено ровно две записи
Выберите учеников, которые правильно ответили на вопрос q13 и Q14

SELECT qa.StudentID FROM questionAnswer qa, Student s 
WHERE qa.StudentID=s.StudentID   AND  
      ((QuestionID=13  AND Pass=0) OR (QuestionID=14 AND Pass=1))
GROUP BY qa.StudentID
HAVING COUNT(*)=2;

Предложение Where совпадает с любыми записями, где q14 верно, а q13 неверно Затем мы группируем по StudentID Наличие требует, чтобы там было две записи

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...