Mysql
 sql >> Base de données >  >> RDS >> Mysql

Quelle requête utiliserais-je pour obtenir des enregistrements frères lors de l'utilisation de tables de fermeture ?

Les frères et sœurs d'un nœud donné auraient le même ancêtre. Cependant, cela inclurait "1" ainsi que votre liste :

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

Dans votre tableau, je ne suis pas sûr de ce que cela signifie pour ancestor être le même que descendant . Mais, je pense que la requête suivante est la requête que vous souhaitez :

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;

MODIFIER :

Vous pouvez le faire en tant que explicite rejoindre comme ceci :

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;

Remarque :j'ai également ajouté la condition t.id <> 2 donc "2" n'est pas considéré comme un frère de lui-même.