SQL запрос запроса Self Join? - PullRequest
       13

SQL запрос запроса Self Join?

0 голосов
/ 26 апреля 2020

новый для SQL.

У меня есть следующий набор данных

A   X       Y   Z    
1   Wind    1   1
2   Wind    2   1
3   Hail    1   1
4   Flood   1   1
4   Rain    1   1
4   Fire    1   1

Я хотел бы выбрать все различные поля 'A', где для всех строк, содержащих A, есть наводнение и дождь.

Таким образом, в этом примере запрос будет возвращать только число 4, поскольку для набора всех строк, содержащих A = 4, мы имеем Flood и Rain.

Мне нужны значения A, где для заданного значения «a» в A существуют строки с «a», которые должны содержать все указанные ниже поля (в примере Flood и Rain).

Пожалуйста, дайте мне знать, если вам нужны дополнительные разъяснения.

Ответы [ 2 ]

1 голос
/ 26 апреля 2020

Мне нужны значения A, где для заданного значения «a» в A существуют строки с «a», которые должны содержать все указанные ниже поля (в примере Flood и Rain).

Вы можете использовать агрегацию и фильтровать с помощью предложения having:

select a
from mytable t
where x in ('Flood', 'Rain') -- either one or the other
having count(*) = 2          -- both match

Если кортежи (a, x) не являются уникальными, то вместо них вы хотите having count(distinct x) = 2.

0 голосов
/ 26 апреля 2020

Вы должны использовать группу count (отличный X) от A и, имея

count (отличный ...), избежать ситуации, когда у вас есть два раза одно и то же значение для X

    select A
    from my_table  
    WHERE x in ('Flood', 'Rain')
    group  A
    having count(distinct X) = 2
...