#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.