У меня есть таблица вроде этого:
name |id | state
name1 12 4
name1 12 4
name2 33 3
name2 33 4
...
Я хочу выбрать каждое имя и идентификатор из таблицы, где состояние равно всего 4, это означает, что имя1 правильно, потому что у него есть только две записи с состоянием 4 и ничего больше. Между тем имя2 ошибочно, потому что у него есть запись с состоянием 4 и запись с состоянием 3.
Вы можете использовать агрегацию, как показано ниже:
SELECT name, id
FROM your_table
GROUP BY name, id
HAVING SUM(state<>4)=0;
select name, id from mytable where id not in
(select distinct id from mytable where state <> 4)
Вы можете использовать это не так:
select distinct name, id
from table1 a
where not exists (select *
from table1 b
where a.id=b.id and state<>4)
вам могут потребоваться 2 подзапроса.
сравните счетчик, если подсчет будет таким же, а затем выберите его
Пример: выберите имя, счетчик (имя) из таблицы, где state = 4 как T1 выберите имя, count (имя) из таблицы, так как T2 выберите T1.name из T1 и T2, где T2.count = T1.count
В более общем случае вы можете использовать счетчик (с отсутствием или с соединением):
select distinct name, id
from table1 a
where not exists (
select *
from table1 b
where a.id=b.id
group by id
HAVING count(distinct state)>1)