Bonjour,
dans le cadre d'une représentation de graphe du type id => parent_id, je bloque sur une requête. Je cherche à récupérer tous les parent_id d'un noeud en fonction d'une liste.
Par exemple dans cet exemple minimal :
je cherche à récupérer tous les parents des noeuds qui ont pour parent 636 ET 849 ce qui devrait sortir :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 id | parent_id 820 | 230 820 | 636 900 | 123 900 | 636 900 | 849 1095 | 1093 1095 | 861 1095 | 849 1095 | 636
je génère le premiers set de résultats avec une auto-jointure :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 id | parent_id 900 | 123 900 | 636 900 | 849 1095 | 1093 1095 | 861 1095 | 849 1095 | 636
mais bloque complètement pour la suite, à savoir contraindre sur plusieurs lignes. J'ai cherché du côté de HAVING mais sans succès. Est-ce que c'est possible en une seule requête ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 SELECT autoJoin.* FROM table LEFT OUTER JOIN table autoJoin ON table.id = autoJoin.id WHERE table.parent_id IN(636, 849)
Je pensais à un truc du style :
mais bloque donc sur la contrainte multi-rows.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 SELECT parent_id FROM table WHERE table.id IN(SELECT autoJoin.parent_id FROM table LEFT OUTER JOIN table autoJoin ON table.id = autoJoin.id WHERE table.parent_id IN(636, 849)) HAVING...
En vous remerciant par avance pour l'aide.
Partager