2016-03-25 5 views
0

Ich möchte überprüfen, ob untergeordnete Zeilen drei Ebenen, zwei Ebenen und eine Ebene tiefer liegen.Wählen Sie eine Unterabfrage aus, um zu überprüfen, ob untergeordnete Zeilen vorhanden sind.

select max(
case 
    (select row from category where relatedRow in (select row from category where relatedRow=?)) is not null then 3 
    (select row from category where relatedRow=?) is not null then 2 
    (select row from category where row=?) is not null then 1 
    else 0 end 
) as level from category 

Wie kann ich das funktionieren lassen?

Diese Abfrage lautet wie folgt. Wenn Zeilen mit verwandten Zeilen der zugehörigen Zeilen (Enkel) vorhanden sind, ist level = 3. Wenn es verwandte Zeilen (Kinder) gibt, Ebene 2. Wenn es eine Zeile =? (Eltern), Ebene 1. Wenn kein Elternteil (Geist), Ebene 0.

Antwort

0

können Sie selbst verwenden join den erwarteten Wert zu erhalten, zum Beispiel:

select c1.row, c2.row, c3.row 
from category c1 left join category c2 on c1.row = c2.related_row 
left join category c3 on c2.row = c3.related_row 
where c1.row = 1; 

Kurz gesagt, gehen zu nth Ebene, müssen Sie selbst die Tabelle n mal beitreten.

Hier ist die SQL Fiddle.

+0

Ich verstehe. Ich versuche das Level zu erreichen. Ich habe maximal 3 Ebenen, aber ich möchte einen "Fall" verwenden, um die Ebene der Kinder, die der Parameter hat, zurückgeben. Für Ihr Beispiel, wenn row = 1, existiert es, es hat also Kinder und Enkel (level = 3). Aber wenn Zeile = 4, existiert es, es hat Kinder und KEINE Enkel, also (level = 2). Das ist das, was ich benötige. Eine Zahl, die das höchste Niveau von Kindern darstellt. –

+0

In diesem Fall müssen Sie etwas tun: http://StackOverflow.com/Questions/7631048/connect-by-prior-äquivalent-for-mysql –

Verwandte Themen