Строки с несколькими соответствующими значениями в одной таблице - PullRequest
2 голосов
/ 22 января 2020

Предположим, у меня есть таблица

Name          Wear
Martin        Hat
Martin        ?
Martin        Shirt
Alfred        Tee
Alfred        Jeans

И я хочу только имена людей, чье значение износа дано полностью, то есть там нет значения NULL (?).

Я думал об использовании группы, имея ... Wear <> NULL, но этого недостаточно, поскольку может быть более одного значения Wear.

В этом случае я бы хотел бы вернуть только «Альфред».

Ответы [ 5 ]

3 голосов
/ 22 января 2020

Вы можете сделать это как

HAVING SUM(Wear IS NULL) = 0

или

HAVING COUNT(*) = COUNT(Wear)
2 голосов
/ 22 января 2020

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

select t.*
from table t
where not exists (select 1 from table t1 where t1.name = t.name and t1.wear is null);

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

select name
from table t
group by name
having sum (wear is null ) = 0;
2 голосов
/ 22 января 2020

Использовать коррелированный подзапрос

select distinct name from tablename a where not exists 
    (select 1 from tablename b where a.name=b.name and wear is null)
1 голос
/ 22 января 2020

Вы можете попробовать это:

select name
from mytable m
where not exists (
   select 1 
   from mytable i 
   where i.name = m.name 
   and i.wear is null)
0 голосов
/ 22 января 2020

Предположим, что ваша таблица называется 'users', затем используйте подзапрос ниже

SELECT * FROM `users` where Wear IS NOT NULL AND Name NOT IN (SELECT Name from `users` where Wear IS NULL)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...