2010-12-04 5 views
2

親IDが5つの子IDを持ち、その子IDが親IDで5つの子IDを持つクエリをどのように構築できますか?私のquery.tableで呼び出すことはできますか?あなたは、いくつかの子エンティティを持つエンティティを求めるためにいくつかの再帰クエリを持っているしたいのですが、その一部に:私は右のあなたを得た場合、私は知りませんが、私はそうは思わconfusion.thanks よろしく imadbaloch親IDに子IDがあり、次回に子IDが親IDであるmysqlクエリを書くにはどうしたらいいですか?

+0

は同じ問題に回答を参照してくださいます。http: //stackoverflow.com/a/33699713/5559741 – wajeeh

答えて

2

子エンティティ(孫エンティティ)も持つ。

残念ながら、MySQLはクエリ内で再帰をサポートしていません。

複数のクエリを使用して、子エンティティの子エンティティ(孫エンティティ)とその子エンティティ(大企業エンティティ)などを問い合わせる必要があります。

更新:深さが固定されている場合、たとえば、あなたは直接の子エンティティと孫のエンティティ(およびこれ以上)に興味がある、あなたは例えば、2つの結合を実行することができます:

SELECT e.id, e.name, ce.id, ce.name, gce.id, gce.name 
FROM <table> AS e 
LEFT JOIN <table> AS ce ON ce.parent_id = e.id 
LEFT JOIN <table> AS gce ON gce.parent_id = ce.id 
+0

JOIN – ajreal

+0

を使用して再帰的にシミュレートすることができます。したがって、再帰の深さを知る必要があります。子エンティティと孫エンティティだけが必要な場合は、あなたの権利があります。結合を使用することができます。しかし、すべての子供と孫のエンティティが、決定されなければならない独自の子エンティティ(および孫や祖父母エンティティなど)を持つことができる状況が発生した場合... – Flinsch

+0

このクエリは親とその子を表示しますが、子供の子供を表示し、詳細を – imad

0

あなたは子供の子供を得るために自己参加することができます。以下のようなテーブルを仮定:のような

Id ChildId .... 
----- ------- ----- 
.... 

何か:

SELECT a.Id as EntryId, a.ChildId as ChildId, b.ChildId as GrandchildId 
FROM <tablename> a INNER JOIN <tablename> b ON a.ChildId = b.Id 

欠点は、階層の各レベルに含めたいためにあなたが他の参加必要があるということです。コメントへの対応

UPDATE

これは、親あたり1人の孫ではありません。親に5人の子供がいて、それぞれに4人の子供がいる場合、合計20行が返されます。

このように、あなたは自己結合を再度する必要があります孫の完全な詳細を取得するには:

SELECT a.Id as EntryId, a.ChildId as ChildId, b.ChildId as GrandchildId, c.* 
FROM (<tablename> a INNER JOIN <tablename> b ON a.ChildId = b.Id) 
    INNER JOIN <tablename> c ON b.ChildId = c.Id 
+0

したがって、各エンティティはただ1つの子エンティティを持つことができます。それは階層ではありません。階層では、エンティティは0から* n *の子エンティティを持つことができ、(最上位エンティティでない限り)1つの親エンティティを持ちます。 – Flinsch

+0

このクエリは親とその子を示していますが、私はその子の子を表示したいと思います – imad

0

クエリの下には試してみてください。

DECLARE @id INT 
SET @id = 5 

CREATE TABLE #temp (id INT , ParentId INT) 

INSERT INTO #temp VALUES(1,0); 

INSERT INTO #temp VALUES(2,1); 

INSERT INTO #temp VALUES(3,2); 

INSERT INTO #temp VALUES(4, 3); 

INSERT INTO #temp VALUES(5,4); 

WITH parent AS 
(
    SELECT id, parentId from #temp WHERE id = @id 
    UNION ALL 
    SELECT t.id, t.parentId FROM parent 
    INNER JOIN #temp t ON t.id = parent.parentid 
) 

SELECT id,ParentId FROM parent 
WHERE id <> @id;  

Drop TABLE #temp; 
関連する問題