2017-10-26 17 views
0

PARENTテーブルPKはPIDで、PIDはCHILDRENテーブルのFKです。 CHILDRENテーブルの別の子と同じ名前を持つ子を持つ親テーブルの親の名前を表示するにはどうすればよいですか?私は再帰的な結合は、同じ名前を見つけるために使用する必要がありますが、私はそれを動作させることはできないと思う。私のクエリの下に使用して親と子テーブルをjoinすることができる午前:同じ名前の子を持つ親のプリント名

select PARENT.NAME as ParentName 
from PARENT inner join CHILDREN 
on PARENT.PID=CHILDREN.PID 
group by NAME; 

私は再帰を完了するには、このクエリを試してみましたが、参加したが、それは動作していない:

select CHILDREN.NAME 
from CHILDREN e, CHILDREN m 
where e.CHILDREN.PID=m.CHILDREN.PID 
order by CHILDREN.PID; 
+0

あなたが探しているものは不明です。お互いに同じ名前の子供がいる親が欲しいですか?または、子供と同じ名前の親ですか? –

+0

テーブルを記述してください(列名、関係、テストデータ)。通常、子供には2つの親があるので、子供1人につき親テーブルに2つのエントリが存在するはずです。 –

+0

クエリは、別の子と同じ名前の子を持つ親を探しています。したがって、childAという名前のchildAを持つparentAおよびparentB。 @FrankテーブルCHILDREN(ChildName、PID(FK))およびテーブルPARENT(PID(PK)、ParentName)。これは、単一の親から単一の子関係までを考慮しているだけです。 – Bill

答えて

0

とParent.Name = Children.Name これは、この名前を子供の名前と一致する親の名前を印刷しませんか?

+0

私は、子供と名前を共有する親を探しています。子供と名前を共有する親ではありません。 – Bill

1

子の名前でグループ化し、少なくとも2つの異なる親が存在するかどうかを評価します。

-- TEST DATA 
with parent(pid, name) as 
(select 1, 'Parent1' from dual 
    union all 
    select 2, 'Parent2' from dual 
    union all 
    select 3, 'Parent3' from dual 
    union all 
    select 4, 'Parent4' from dual), 
children(name, pid) as 
(select 'Tom', 1 from dual 
    union all 
    select 'Tim', 1 from dual 
    union all 
    select 'Steven', 2 from dual 
    union all 
    select 'Tim', 2 from dual 
    union all 
    select 'Marta', 2 from dual 
    union all 
    select 'Jess', 3 from dual 
    union all 
    select 'Jim', 4 from dual 
    union all 
    select 'Jess', 4 from dual) 

--> SELECT 
select c.name, listagg(p.name, ',') within group(order by p.name) 
    from parent p 
    join children c 
    on c.pid = p.pid 
group by c.name -- group by child name 
having min (p.pid) <> max (p.pid) -- at least two different parents 


--> RESULT 
Jess Parent3,Parent4 
Tim  Parent1,Parent2 
関連する問題