Forum |  HardWare.fr | News | Articles | PC | Prix | S'identifier | S'inscrire | Shop Recherche
1496 connectés 

  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  [PostgreSQL] Requête hiérarchique

 



 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[PostgreSQL] Requête hiérarchique

n°2372747
BMenez
Posté le 03-01-2021 à 18:50:31  profilanswer
 

J'ai une base de donnée représentant un schéma de câblage :
 


                          Table "t_cable"
   Column    |            Type             | Collation | Nullable | Default  
-------------+-----------------------------+-----------+----------+---------
  c_code     | character varying(254)      |           | not null |  
  c_batiment | character varying(254)      |           |          |  
  c_color    | character varying(10)       |           |          |  


 
Chaque branchement est défini par :


                        Table "t_cablage"
   Column   |            Type             | Collation | Nullable | Default  
------------+-----------------------------+-----------+----------+---------
 ps_code    | character varying(254)      |           | not null |  
 ps_1       | character varying(254)      |           |          |  
 ps_2       | character varying(254)      |           |          |  


 
ps_1 et ps_2 sont issus de c_code
 
Par exemple :


  ps_code  |  ps_1  | ps_2
-----------+--------+-------+
 br1       | bleu   |            
 br2       | orange |
 br3       |        | violet
 br4       | vert   |
 br5       | bleu   | jaune
 br6       | vert   | rouge
 br7       | orange | violet
 br8       | rouge  | jaune


(La valeur null indique que le câble est actif / branché sur un équipement)
 
Je cherche à suivre une connexion de son origine à son extrémité. Donc, pour le câble jaune, avec le tableau ci-dessus :

(équipement) <-> bleu <-> jaune <-> rouge <-> vert <-> (équipement)


 
J'utilise cette requête pour sortir la liste des câbles reliés au câble jaune :

WITH RECURSIVE subordinates AS (
 SELECT                      
   ps_1,
   ps_2
 FROM
   t_cablage
 WHERE
   ps_1 = 'jaune' OR
   ps_2 = 'jaune'
 UNION
   SELECT
     po.ps_1,
     po.ps_2
   FROM
     t_cablage ca
   INNER JOIN subordinates s ON s.ps_1 = ca.ps_1
                             OR s.ps_1 = ca.ps_2
                             OR s.ps_2 = ca.ps_2
                             OR s.ps_2 = ca.ps_1)
SELECT * FROM subordinates;


 
Mon problème est que ça ne me sort pas le cheminement.
Le problème pourrait être simple si j'avais ps_1 et ps_2 avec une relation parent->enfant à sens unique mais ce n'est pas le cas (le parent peut être ps_1 ou ps_2)
 
Existe-t-il une requête permettant de sortir le cheminement en partant d'une extrémité et prenant en entrée un câble participant à la liaison ?

mood
Publicité
Posté le 03-01-2021 à 18:50:31  profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  [PostgreSQL] Requête hiérarchique

 

Sujets relatifs
envoi de requête en php sur Home-assistantconversion requête sql XML -> JSON
Récupérer résultat d'une réquête dans un tableau en shell (ksh)requête SQL en php
SQL DISTINCT requete spéciale (POSTGRESQL)Encore mes plantages bizarres (POSTGRESQL cette fois)
MYSQL : update et select en une seule requêtePREPARE PostGreSQL Ca marche... presque
Excel - intégration de données JSON via requête sur site WEB 
Plus de sujets relatifs à : [PostgreSQL] Requête hiérarchique


Copyright © 1997-2018 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR