Mysql
 sql >> Database >  >> RDS >> Mysql

Quale query userei per ottenere record di pari livello quando utilizzo le tabelle di chiusura?

I fratelli di un dato nodo avrebbero lo stesso antenato. Tuttavia, questo includerebbe "1" così come il tuo elenco:

select t.*
from table t 
where t.ancestor = (select ancestor from table t2 where t.id = 2);

Nella tua tabella, non sono sicuro di cosa significhi per ancestor essere uguale a descendant . Ma penso che la seguente sia la query che desideri:

select t.*
from table t 
where t.ancestor = (select ancestor from table t2 where t2.id = 2) and
      t.ancestor <> t.descendant and
      t.id <> 2;

MODIFICA:

Puoi farlo come esplicito unisciti in questo modo:

select t.*
from table t join
     table t2
     on t.ancestor = t2.ancestor and
        t2.id = 2 a
where t.id <> 2 and
      t.ancestor <> t.descendant;

Nota:ho anche aggiunto la condizione t.id <> 2 quindi "2" non è considerato un fratello di per sé.