0
votes

Query SQL pour sélectionner les noms des parents et des enfants d'une ligne

J'ai une table dans hsqldb et des valeurs comme celle-ci

 Entrez la description de l'image ici

Comment écrire une requête qui s'affiche comme celle-ci

 Entrez la description de l'image ici


2 commentaires

S'il vous plaît montrez-nous ce que vous avez essayé jusqu'à présent


J'ai essayé (récursif, rejoindre, ....) Méthodes et n'a aucun résultat. J'ai créé ce résultat manuellement!


3 Réponses :


1
votes

Vous allez ici:

create table t (id int, name varchar(10), parent int);

insert into t (id, name, parent) values
  (0, 'A', null),
  (1, 'A1', 0),
  (2, 'B', null),
  (3, 'B1', 2),
  (4, 'C', null),
  (5, 'C1', 4),
  (6, 'A2', 1),
  (7, 'A3', 1),
  (8, 'A4', 7),
  (9, 'B3', 3);


0 commentaires

1
votes

Vous pouvez utiliser une requête récursive: xxx

La requête sélectionne la table entière, puis grimpe l'arborescence de la hiérarchie de chaque rangée. L'avantage de cette approche est que cela gérerait correctement un arbre "cassé" (comme un enfant avec un parent non valide, par exemple).


0 commentaires

0
votes

Une alternative, une requête plus simple basée sur la réponse acceptée. Nous ne commencons qu'avec les racines (rangées avec des parents nuls) et chaque fois que l'Union est effectuée, seules quelques lignes sont ajoutées. Comme la réponse indique, ce type de requête ne sélectionnera pas les lignes enfants avec ID parent non valide:

alter table t add constraint pk primary key(id)
alter table t add constraint fk foreign key (parent) references t(id)


0 commentaires