Как я могу добиться этого с SQL? - PullRequest
0 голосов
/ 20 марта 2020

Допустим, у меня есть одна таблица mytable со следующими данными:

https://i.stack.imgur.com/hvLHO.png

мне интересно иметь идентификаторы, принадлежащие Обе категории A и B

Желаемый результат будет таким:

https://i.stack.imgur.com/nPmW1.png

я пробовал:

select * from mytable where category in ('A','B');

но, похоже, не работает

1 Ответ

1 голос
/ 20 марта 2020

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

select t.*
from mytable t
where 
    category in ('A', 'B')
    and exists (
        select 1 
        from mytable t1 
        where t1.id = t.id and t1.category in ('A', 'B') and t1.category <> t.category
    )

Другой подход - это количество окон (при условии отсутствия дубликатов в (id, category) кортежах):

select id, price, category
from (
    select t.*, count(*) over(partition by id) cnt
    from mytable t
    where category in ('A', 'B')
) t
where cnt > 1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...