SQL для исключения - PullRequest
0 голосов
/ 12 мая 2019

У меня есть таблица, которая представляет собой простые списки идентификационных номеров и ИМЕН - я пытаюсь написать SQL, который возвращает только те строки, в которых ИМЯ не имеет определенных идентификаторов.

Это меня озадачило -запрос ниже возвращает все, поскольку у них есть другие идентификаторы из списков исключений (большой диапазон идентификаторов).Как структурировать запрос, в котором возвращаются только те, у кого нет идентификатора 2 или 3 - т.е. возвращает только «bob» для таблицы ниже.

выберите * из таблицы, где идентификатор не указан (2, 3)

ID  NAMES
1   bob
1   alice
2   alice
1   dave
2   dave
3   dave
4   dave

Спасибо.

1 Ответ

4 голосов
/ 12 мая 2019

Один метод - group by и having:

select name
from t
group by name
having sum(case when ID in (2, 3) then 1 else 0 end) = 0;

Если вам нужны оригинальные идентификаторы, вы можете добавить listagg(id, ',') within group (order by id) к select. Или используйте not exists:

select t.*
from t
where not exists (select 1
                  from t t2
                  where t2.name = t.name and
                        t2.id in (2, 3)
                 );
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...