SQL: Как найти всех родителей, у которых есть дети с заданным идентификатором - PullRequest
0 голосов
/ 16 ноября 2018

У меня вопрос по поводу таблицы присоединения родителей / детей. У меня есть таблица соединений, которая называется parent_children. Таблица содержит parent_id и child_id. Так вот так:

parent_id  | child_id
1            1
1            2
1            3
2            1
2            3
3            1
3            4

Я хочу найти всех родителей, у которых есть дети, в определенном списке. Допустим, список содержит 1 и 3, тогда я хочу parent_id 1 и 2. Если список содержит 4, я хочу parent_id 3. Как мне это сделать?

Ответы [ 2 ]

0 голосов
/ 16 ноября 2018

Таким образом, вам нужно посчитать количество вхождений в списке IN вашего ввода. Следующее может помочь.

create table parent_children(parent_id int, child_id int)


insert into parent_children values(1,1)
insert into parent_children values(1,2)
insert into parent_children values(1,3)
insert into parent_children values(2,1)
insert into parent_children values(2,3)
insert into parent_children values(3,1)
insert into parent_children values(3,4)



with list_data
  as(select *
       from (values(1),(3))as t(x)
    )
   select a.x          
     from list_data a
left join parent_children b
       on a.x=b.child_id
  group by a.x
having count(*) = count(distinct b.parent_id)
0 голосов
/ 16 ноября 2018

Вы можете использовать group by, where и having:

select parent_id
from t
where child_id in (1, 3)
group by parent_id
having count(*) = 2;  -- "2" is the number of items in the list

Предполагается, что в таблице отсутствуют повторяющиеся родительские / дочерние строки. Если это возможно, используйте count(distinct child_id) = 2.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...