SQL тянет связанных людей - PullRequest
0 голосов
/ 30 марта 2020

Я пытаюсь вытащить таблицу людей в возрасте 64-80 лет и связанных с ними членов семьи.

Например, семья без членов в возрасте 64-80 лет не будет вытянута. Но семья, состоящая из 1 или более человек в возрасте от 64 до 80 лет, будет вытянута всей семьей. И каждая семья имеет уникальный семейный код.

Таблица будет выглядеть примерно так:

Resulting Table

Ответы [ 2 ]

0 голосов
/ 30 марта 2020

С оператором все очень просто IN:

select * from tablename
where family_code in (select family_code from tablename where age between 64 and 80)
0 голосов
/ 30 марта 2020

Вы можете использовать exists, чтобы вывести всех членов семей, в которых есть хотя бы один человек, чей возраст составляет от 64 до 80 лет:

select f.*
from families f
where exists (
    select 1 
    from families f1 
    where f1.family_code = f.family_code and f1.age between 64 and 80
)

Для производительности вам нужен индекс на (family_code, age) .

В MySQL 8.0 вы можете использовать оконные функции:

select *
from (
    select f.*, max(age between 64 and 80) over(partition by family_code) to_keep
    from families f
) t
where to_keep
...