sql >> Base de Datos >  >> RDS >> Mysql

¿Qué consulta usaría para obtener registros hermanos cuando use tablas de cierre?

Los hermanos de un nodo dado tendrían el mismo ancestro. Sin embargo, esto incluiría "1" además de su lista:

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

En su tabla, no estoy seguro de lo que significa para ancestor ser igual a descendant . Pero, creo que la siguiente es la consulta que desea:

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;

EDITAR:

Puede hacer esto como explícito únete así:

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:también agregué la condición t.id <> 2 por lo que "2" no se considera un hermano de sí mismo.