Как я могу запросить, чтобы получить этот результат? - PullRequest
1 голос
/ 08 апреля 2019
id     string     id2  
1        a         1
2        b         1
3        a         2
4        c         2
5        d         3

Хорошо, я могу получить SELECT * FROM table WHERE string NOT IN ('a','c'):

2        b         1
5        d         3 

но я также хочу не получать остальные строки, содержащие a или c с тем же id2. Результат:

5        d         3

Ответы [ 2 ]

0 голосов
/ 08 апреля 2019

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

select t.*
from t
where not exists (select 1
                  from t t2
                  where t2.id2 = t.id2 and t2.string in ('A', 'C')
                 );

Если вы просто хотите получить значения id2, вам может быть удобно агрегировать:

select id2
from t
group by id2
having sum(case when string in ('A', 'C') then 1 else 0 end) = 0;
0 голосов
/ 08 апреля 2019

Есть подзапрос, который возвращает значения id2, имеющие a или c.Выполните NOT IN эти значения id2.

SELECT * FROM table
WHERE id2 not in (select id2 from table where string IN ('a','c'))

Если id2 может содержать нулевые значения, вместо этого введите NOT EXISTS:

SELECT * FROM table t1
WHERE NOT EXISTS (select 1 from table t2
                  where t2.string IN ('a','c')
                    and t1.id2 = t2.id2))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...