Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Que consulta eu usaria para obter registros irmãos ao usar tabelas de fechamento?


Os irmãos de um determinado nó teriam o mesmo ancestral. No entanto, isso incluiria "1" e sua lista:
select t.*
from table t 
where t.ancestor = (select ancestor from table t2 where t.id = 2);

Na sua tabela, não tenho certeza do que isso significa para ancestor para ser o mesmo que descendant . Mas, acho que o seguinte é a consulta que você deseja:
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:

Você pode fazer isso como um explícito junte-se assim:
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;

Observação:também adicionei a condição t.id <> 2 então "2" não é considerado um irmão de si mesmo.