2010-12-04 4 views
2

Wie kann ich die Abfrage, wo Eltern-ID haben eine fünf Kind-ID und danach Kind-ID ist eine Eltern-ID und haben eine fünf Kind-id.wie kann ich in unserer Anfrage.tabelle nur nur eine anrufen. Kindly helfen mir dabei confusion.thanks Grüße imadbalochWie können wir MySQL-Abfrage schreiben, wo Eltern-ID eine Kind-ID haben und das nächste Mal Kinder-ID ist eine Eltern-ID, wie kann ich tun?

+0

Antwort auf das gleiche Problem Siehe: http: //stackoverflow.com/a/33699713/5559741 – wajeeh

Antwort

2

ich weiß nicht, ob ich Sie richtig verstanden habe, aber ich denke so: Sie möchten, dass einige rekursive Abfrage haben für eine Entität mit einigen Kind Einheiten, die ihrerseits zu fragen haben auch Kind-Entitäten (Enkel-Entitäten).

Leider MySQL unterstützt keine Rekursion innerhalb der Abfragen.

Sie müssen es manuell tun, indem Sie mehrere Abfragen verwenden, um nach den untergeordneten Entitäten der untergeordneten Entitäten (Enkel-Entitäten) und ihren untergeordneten Entitäten (grandgrandchild-Entitäten) und so weiter zu fragen.

aktualisieren: Wenn die Tiefe festgelegt ist, sagen wir, Sie sind in den direkten Kind Einheiten interessiert und die Enkel Einheiten (und nicht mehr), dann könnten Sie führen zwei beitritt, zB:

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

Sie können rekursiv mit der Verwendung von JOIN – ajreal

+0

simulieren. Daher müssen Sie die Tiefe der Rekursion kennen, die somit nicht dynamisch sein konnte. Wenn nur untergeordnete Entitäten und Enkel-Entitäten benötigt werden, dann haben Sie Recht, Sie könnten einfach Joins verwenden. Aber wenn die Situation entsteht, dass alle Kind- und Enkel-Entitäten ihre eigenen Kind-Entitäten (und Enkel- und Enkel-Entitäten, etc.) haben könnten, die bestimmt werden müssen, ... – Flinsch

+0

diese Abfrage zeigt nur die Eltern und sein Kind, aber ich möchte Zeigen Sie das Kind des Kindes und vollständige Details – imad

0

Sie könnten einen Self-Join machen, um das Kind eines Kindes zu bekommen. Unter der Annahme einer Tabelle wie:

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

Etwas wie:

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 

Der Nachteil ist, dass für jede Ebene der Hierarchie Sie Sie einschließen möchten, müssen eine andere beitreten.

UPDATE

auf Kommentare reagieren.

Dies ist nicht ein Enkelkind pro Elternteil. Wenn der Elternteil 5 Kinder hat und jedes Kind 4 Kinder hat, werden insgesamt 20 Zeilen zurückgegeben.

Um eine volle Detail der Enkel bekommen Sie brauchen selbst kommen wieder, wie folgt aus:

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

So könnte jede Entität nur eine einzige untergeordnete Entität haben. Das ist keine Hierarchie. In einer Hierarchie könnte eine Entität 0 bis * n * untergeordnete Entitäten haben und eine übergeordnete Entität (sofern es sich nicht um eine Entität auf oberster Ebene handelt). – Flinsch

+0

Diese Abfrage zeigt nur die Eltern und sein Kind, aber ich möchte das Kind des Kindes und vollständige Details zeigen – imad

0

Try Below Abfrage:

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; 
Verwandte Themen