MySql: Как выбрать строки, где все значения одинаковы?

0

У меня есть таблица вроде этого:

name |id | state
name1 12   4
name1 12   4
name2 33   3
name2 33   4
...

Я хочу выбрать каждое имя и идентификатор из таблицы, где состояние равно всего 4, это означает, что имя1 правильно, потому что у него есть только две записи с состоянием 4 и ничего больше. Между тем имя2 ошибочно, потому что у него есть запись с состоянием 4 и запись с состоянием 3.

Теги:

5 ответов

1
Лучший ответ

Вы можете использовать агрегацию, как показано ниже:

SELECT name, id
FROM your_table
GROUP BY name, id
HAVING SUM(state<>4)=0;

См. Демонстрацию в SQL Fiddle.

  • 1
    Это сработало отлично. Спасибо!
1
select name, id from mytable where id not in
(select distinct id from mytable where state <> 4)
0

Вы можете использовать это не так:

select distinct name, id 
from table1 a
where not exists (select *
                  from table1 b
                  where  a.id=b.id and state<>4)
0

вам могут потребоваться 2 подзапроса.

  1. выберите с группой по имени состояние 4
  2. выберите группу по имени

сравните счетчик, если подсчет будет таким же, а затем выберите его

Пример: выберите имя, счетчик (имя) из таблицы, где state = 4 как T1 выберите имя, count (имя) из таблицы, так как T2 выберите T1.name из T1 и T2, где T2.count = T1.count

0

В более общем случае вы можете использовать счетчик (с отсутствием или с соединением):

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)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню