SQL запрос, чтобы увидеть, выполнено ли условие и ничего больше

#mysql #sql

#mysql #sql

Вопрос:

У меня есть таблица MySQL, которая выглядит следующим образом:

введите описание изображения здесь

Я пытаюсь выяснить, имеет ли столбец anaID значение 22 или 23, и для anaID для этой комбинации SubID / SampleID не назначеноникакого другого значения.

что-то вроде

 select * from anaData where subID='2020-04-21-17' and sampleID='crazy2' 
and 
(anaID=22 or anaID=23)
and 
andID <> ??anything else??
  

Я могу запросить все совпадения и перебирать их, и у меня есть программная логика, которая решает, но я надеюсь, что это можно сделать в запросе.

Комментарии:

1. опубликуйте желаемый результат

2. он должен возвращать либо набор данных с показателем, равным 22 или 23, либо пустой результат

Ответ №1:

Вы можете использовать not exists :

 select *
from anaData a
where subID = '2020-04-21-17' and
      sampleID = 'crazy2' and
      not exists (select 1
                  from anaData a2
                  where a2.subID = a.subID and a2.sampleID = a.sampleID and
                        a2.anaID not in (22, 23)
                 );
  

Оказывается, что вам не нужно anaID in (22, 23) во внешнем запросе. exists позаботится об этом.

Ответ №2:

Это работает, если существует хотя бы один anaID 22 или 23:

 select subID, sampleID
from anaData 
where subID='2020-04-21-17'
  and sampleID='crazy2' 
group by subID, sampleID
having
   sum(case when anaID in (22, 23) then 1 else -100 end) > 1
  

Если вы хотите, чтобы оба 22 и 23 переключились на = 2 (при условии, что комбинация SubID / SampleID / anaID уникальна.

Это также можно использовать без WHERE-conditions.