#1 Wed 27 September 2017 17:39
- meonais
- Participant occasionnel
- Date d'inscription: 17 Jan 2017
- Messages: 35
Aide sur requête recursive
Bonjour,
Je me forme petit à petit sur les requêtes postgresql/postgis (elles ne sont donc pas toujours optimisées...).
J'ai besoin d'attribuer des notes à des tronçons de cours d'eau en fonction de la note du tronçon situé directement en aval.
Je travaille avec une extraction de la bd carthage, correctement orientée et dont la topologie est vérifiée.
J'ai une couche de tronçons (env. 800 entités) constituée des champs suivants :
idsplit integer, (primary key)
region_zone_hydro text,
source integer,
target integer,
max numeric,
classe numeric,
classe_corr numeric ---> Champ à utiliser,
geom geometry(LineString,2154)
J'ai une requête récursive qui me donne les chemins à partir de chaque tronçon (je l'ai récupérée, j'ai du mal encore à comprendre comment appliquer la récursivité en fonction des situations) :
Code:
DROP TABLE IF EXISTS recursi CASCADE; CREATE TEMP TABLE recursi AS ( WITH RECURSIVE ordered_list(idsplit, source,depth, path, cycle) as ( select idsplit, source,1 as depth, array[idsplit] as path, false as cycle from split UNION ALL select s.idsplit, s.source, ol.depth+1 as depth, path || s.idsplit as path, s.idsplit=ANY(path) as cycle from split s join ordered_list ol on ol.source = s.target where not cycle ) select ol.*, s.geom from ordered_list ol join split s on s.idsplit = ol.idsplit GROUP BY ol.idsplit, ol.source, ol.depth, ol.path, ol.cycle, s.geom ) ;
ce qui donne (extrait) :
Code:
idsplit source depth path cycle geom (non copiée ici) (...) 22 868 8 {29,28,27,26,25,24,23,22} f 22 868 9 {15,14,28,27,26,25,24,23,22} f 22 868 10 {16,15,14,28,27,26,25,24,23,22} f (...) 23 1136 7 {14,28,27,26,25,24,23} f 23 1136 7 {29,28,27,26,25,24,23} f 23 1136 8 {15,14,28,27,26,25,24,23} f (...)
Je souhaite donc que :
"si la valeur de "classe_corr" du tronçon amont (B) est inférieure à celle de son ou de ses tronçons en aval (A), alors le tronçon B prend (la plus grande) valeur de A".
Et ainsi de suite jusqu'à la fin de mon réseau hydrographique.
Je précise si besoin, que le réseau est orienté de l'aval vers l'amont.
Je me suppose qu'il faut de nouveau une requête WITH RECURSIVE mais comme je le disais plus haut, je n'arrive pas à visualiser la construction à adopter...
Pouvez-vous m'aider à construire cette partie de requête ?
Hors ligne
#2 Fri 29 September 2017 15:01
- meonais
- Participant occasionnel
- Date d'inscription: 17 Jan 2017
- Messages: 35
Re: Aide sur requête recursive
Bonjour à tous,
J'ai essayé de retravailler sur mon problème...
Je ne pense pas avoir été très limpide dans mon post précédent donc je vous donne en plus une image de ce que j'ai aujourd'hui et de ce que j'aimerais obtenir
[img]http://imageshack.com/a/img922/8581/w7qCZM.jpg[/img]
Je souhaite donc :
- que "si la valeur de "classe_corr" du tronçon amont (B/enfant) est inférieure à celle de son ou de ses tronçons en aval (A/parent), alors le tronçon B prend (la plus grande) valeur de A/parent".
Et ainsi de suite jusqu'à la fin de mon réseau hydrographique.
- la cerise sur le gâteau, ce serait d'avoir la classe 0 en aval (tronçon(s) "grands-parents") du premier tronçon parent (A le plus aval) si et seulement s'il n'y a aucune note aujourd'hui sur ces tronçons grands-parents ET qu'il existe un tronçon parent noté en amont ; sinon ça doit rester en classe "NULL"
J'ai tenté une requête récursive mais pour l'instant :
- soit elle ne me donne qu'une partie du résultat attendue (avec UNION): seuls quelques tronçons B (enfant) sont modifiés et je n'arrive pas à récupérer les valeurs initiales des tronçons A ou B (ceux qui doivent conserver la valeur initiale de class_corr car les conditions de case ne sont pas vérifiées) :
Code:
DROP TABLE IF EXISTS testok CASCADE; CREATE TABLE testok AS ( WITH RECURSIVE montaison (idsplit, source, target, classe_corr) AS (SELECT DISTINCT idsplit, source, target, classe_corr FROM testsum WHERE testsum.source NOT IN (SELECT target FROM testsum) UNION SELECT enfant.idsplit, enfant.source, parent.target, (CASE WHEN (parent.classe_corr > enfant.classe_corr) THEN parent.classe_corr WHEN (parent.classe_corr < enfant.classe_corr) THEN enfant.classe_corr WHEN (parent.classe_corr IS NULL) THEN 0 ELSE enfant.classe_corr END) FROM testsum AS enfant INNER JOIN montaison AS parent ON parent.target = enfant.source ) SELECT s.idsplit, s.source, s.target, s.max, s.classe, s.classe_corr, m.idsplit as enfantidsplit, m.source as enfantsource, m.target as parenttarget, m.classe_corr as classang_franchi, s.region_zone_hydro, s.geom FROM testsum s LEFT OUTER JOIN montaison m ON s.idsplit = m.idsplit )
- soit elle tourne longtemps et/ou j'ai un message d'erreur (avec UNION ALL) :
Code:
DROP TABLE IF EXISTS testok CASCADE; CREATE TABLE testok AS ( WITH RECURSIVE montaison (idsplit, source, target, classe_corr) AS (SELECT DISTINCT idsplit, source, target, classe_corr FROM testsum WHERE testsum.source NOT IN (SELECT target FROM testsum) UNION ALL SELECT enfant.idsplit, enfant.source, parent.target, (CASE WHEN (parent.classe_corr > enfant.classe_corr) THEN parent.classe_corr WHEN (parent.classe_corr < enfant.classe_corr) THEN enfant.classe_corr WHEN (parent.classe_corr IS NULL) THEN 0 ELSE enfant.classe_corr END) FROM testsum AS enfant INNER JOIN montaison AS parent ON parent.target = enfant.source ) SELECT s.idsplit, s.source, s.target, s.max, s.classe, s.classe_corr, m.idsplit as enfantidsplit, m.source as enfantsource, m.target as parenttarget, m.classe_corr as classang_franchi, s.region_zone_hydro, s.geom FROM testsum s LEFT OUTER JOIN montaison m ON s.idsplit = m.idsplit )
le message d'erreur :
ERREUR: n'a pas pu étendre le fichier « base/72185/80520677.67 » : No space left on device
État SQL :53100
Astuce : Vérifiez l'espace disque disponible.
Je précise que tout est en local, sur un ordinateur portable...
Pstgresql 9.5 et postgis 2.3.2
Auriez-vous une idée pour m'aiguiller dans cette requête récursive ?
Merci d'avance !
Hors ligne
#3 Sun 01 October 2017 13:16
- tumasgiu
- Membre
- Lieu: Ajaccio
- Date d'inscription: 5 Jul 2010
- Messages: 1160
Re: Aide sur requête recursive
Salut,
J'ai fait un fiddle qui je pense fait le travail :
http://sqlfiddle.com/#!17/53864/4
Elle suppose que le réseau soit acyclique.
L'idée c'est d'ordonner les tronçons par profondeur croissante,
et de mettre à jour par groupe de profondeur, de façon à garantir
l'ordre topologique de la mise à jour, c'est à dire qu'on est sur de mettre à jour
un tronçon une fois que tout ses tronçons parents sont mis à jour.
Une fonction est utilisée car il n'est pas possible d'ordonner une instruction UPDATE.
Je ne pense pas que la méthode soit optimale et qu'elle supporte la mise à l'échelle.
Dernière modification par tumasgiu (Mon 02 October 2017 21:59)
Hors ligne
#4 Mon 02 October 2017 16:13
- meonais
- Participant occasionnel
- Date d'inscription: 17 Jan 2017
- Messages: 35
Re: Aide sur requête recursive
Bonjour tumasgiu
Et merci beaucoup pour votre réponse.
Comme je vous le disais, je débute, surtout avec les récursives et... les fonctions. J'avais effectivement pensé à utiliser les maximums de profondeur mais n'arrivait pas à tourner tout ça correctement, pour que ce soit cyclique.
J'ai utilisé votre code, en l'adaptant (je pense) à mes données. En fin de requête j'ai donc ce code pour mettre à jour/corriger le champ classe_corr de la table testsum (ma couche de tronçons) :
Code:
DROP FUNCTION IF EXISTS pg_temp.upd(t text) CASCADE; CREATE FUNCTION pg_temp.upd(t text) RETURNS VOID AS $$ BEGIN EXECUTE 'UPDATE testsum t SET classe_corr = GREATEST(classe_corr, (SELECT max(classe_corr) FROM testsum t2 WHERE t2.target = t.source)) WHERE t.idsplit IN (' || t || ' )'; END; $$ LANGUAGE plpgsql; WITH RECURSIVE rec(depth, idsplit, s, e) AS( SELECT 0, t.idsplit, t.source , t.target FROM testsum t LEFT JOIN testsum t2 ON t.source = t2.target WHERE t2.target IS NULL UNION SELECT depth + 1, t.idsplit, t.source, t.target FROM rec JOIN testsum t ON rec.e = t.source ) SELECT pg_temp.upd(string_agg(f.idsplit::text, ',')) FROM (SELECT max(depth) depth, idsplit FROM rec GROUP BY idsplit) f WHERE depth > 0 GROUP BY depth ORDER BY depth;
Je n'ai pas de bug annoncés mais je dois lancer la partie récursive plusieurs fois pour aboutir à mes fins ; c'est à dire pour que la modification des valeurs sur les tronçons "fils" se propage jusqu'au dernier.
En image, ça donne ça :
Premier lancement de la récursive après création de la fonction :
[img]http://imageshack.com/a/img923/8484/tjwsyU.jpg[/img]
Deuxième lancement de la récursive :
[img]http://imageshack.com/a/img923/6427/sIwZIY.jpg[/img]
Troisième lancement de la récursive :
[img]http://imageshack.com/a/img923/5183/tuucwm.jpg[/img]
etc.
J'ai testé, je peux arriver à mes fins mais en lançant une dizaine de fois la requête (je suppose que ça dépend du nombre d'entités tronçons et/ou de leurs connexions entre eux si j'ai bien analysé la requête).
Ai-je mal utilisé vos éléments ?
Est-ce lié à ce que vous appelez "mise à l'échelle" (je ne comprends pas trop votre expression dans ce contexte) ?
En vous remerciant de nouveau de votre aide !
Hors ligne
#5 Wed 04 October 2017 18:27
- tumasgiu
- Membre
- Lieu: Ajaccio
- Date d'inscription: 5 Jul 2010
- Messages: 1160
Re: Aide sur requête recursive
Quand je parlais de mise à l'échelle, je parlais de volume de donnée à traiter,
pas sur que les performances soient identique avec un jeu de dizaine de milliers de tronçons et beaucoup de connexions entre eux.
On dit couramment que la requête ne "scale", et on peut employer le néologisme scalabilité.
Mais j'aime bien employer des termes peu usités, çà me donne l'air intéressant.
https://fr.wikipedia.org/wiki/Scalability
l'adaptation de la requête a l'air correcte, et j'ai essayé de complexifier un peu
mes données test pour reproduire le bug sans succès.
Si vous pouviez me faire parvenir un échantillon de vos données
(typiquement celles que l'on voit sur votre capture d'écran),
que je puisse tester.
peut être y a-t'il un cas auquel je n'ai pas réfléchi.
Comment exécutez vous la requête ? psql ? pgadmin ? autre ?
C'est peut être une histoire d'isolation transactionnelle.
Dernière modification par tumasgiu (Wed 04 October 2017 19:05)
Hors ligne
#6 Wed 04 October 2017 19:17
- Nicolas Ribot
- Membre
- Lieu: Toulouse
- Date d'inscription: 9 Sep 2005
- Messages: 1554
Re: Aide sur requête recursive
Bonsoir:
le message d'erreur sur la récursive avec union all: attention: ca veut dire que la requete ne finit jamais et remplit tout le disque (no space left). Et ca, PG n'aime pas du tout.
Vérifiez que vous avez bien récupéré l'espace disque apres la fin de cette requete. (select pg_database_size('mabase')) et taille sur le disque.
Sinon, malgré les nouvelles explications, je ne suis pas sur de comprendre ce que vous voulez.
Les numéros sur les images correspondent aux id de troncon ou aux classes ?
Vous auriez un exemple écrit des troncons et attributs que vous voudriez, par ex sur 2 ou 3 troncons ?
Nicolas
Hors ligne
#7 Wed 04 October 2017 19:37
- tumasgiu
- Membre
- Lieu: Ajaccio
- Date d'inscription: 5 Jul 2010
- Messages: 1160
Re: Aide sur requête recursive
le message d'erreur sur la récursive avec union all: attention: ca veut dire que la requete ne finit jamais et remplit tout le disque (no space left). Et ca, PG n'aime pas du tout.
Très juste, e n'ai pas pensé à le préciser. Pour se prémunir de ce genre de boulette, qui peuvent être assez embêtantes,
il est conseillé d'utiliser LIMIT dans la requête qui utilise la CTE récursive.
Dernière modification par tumasgiu (Wed 04 October 2017 19:37)
Hors ligne
#8 Wed 04 October 2017 19:42
- meonais
- Participant occasionnel
- Date d'inscription: 17 Jan 2017
- Messages: 35
Re: Aide sur requête recursive
Bonsoir tumasgiu et Nicolas,
Merci de votre retour.
Je n'ai pas la possibilité de vous transmettre des données ce soir, ce sera pour demain matin à la première (ou presque) heure !
@tumasgiu
- ..et ça donne l'occasion d'en apprendre encore plus à vos lecteurs
- j’exécute sous pgadminIII
- je vais chercher "isolation transactionnelle" !
@Nicolas
- oui, je me suis faite avoir plusieurs fois avec le union all mais toujours réussi à refaire tourner correctement après
- pour l'espace disque, je ne comprends pas trop ce que je fais :$ ni ce que j'ai fait : j'avais lancé (select pg_database_size('mabase')) en changeant le nom de la base et ça m'avait donné un nombre à quelques chiffres mais maintenant :
Code:
ERREUR: n'a pas pu tester le fichier « base/72185/42736700 » : Permission denied
- les numéros sur les premières images sont les id de tronçons, désolée d'avoir laissé trainer ça. Les classes sont seulement illustrées par les couleurs
- pour l'exemple écrit, la transmission demain d'une partie des données, ça ira ?
Merci encore,
Bonne soirée
Hors ligne
#9 Thu 05 October 2017 10:20
- meonais
- Participant occasionnel
- Date d'inscription: 17 Jan 2017
- Messages: 35
Re: Aide sur requête recursive
Bonjour,
J'ai passé une partie de la matinée à tester de nouveau tout ça, sans plus de résultats.
Pour mieux contextualiser je vous redonne les grandes étapes du travail réalisé, avec un schéma qui tente de les expliquer :
- 1/ j'ai utiliser la bdcarthage pour obtenir mon linéaire de cours d'eau.
- 2/ J'ai "découpé" mon cours d'eau par des points qui ont chacun une valeur.
- 3/ J'attribue ensuite la valeur cumulée des points aux tronçons découpés, de l'aval à l'amont ( voir (A) sur le schéma)
- 4/ J'attribue une classe à ces tronçons, en fonction de la valeur obtenue par le cumul de l'aval à l'amont ( voir seconde partie du schéma)
- 5/ Je pondère la classe de ces tronçons en fonction de la valeur brute de chaque point directement en aval du tronçon ( voir seconde partie du schéma)
- 6/ Je souhaite maintenant "propager" vers l'amont cette nouvelle classe ( voir seconde partie du schéma)
[img]http://imageshack.com/a/img924/1202/so2bRt.jpg[/img]
Je vous joins la couche sur laquelle je souhaiterais appliquer la récursive qui propage cette nouvelle classe vers l'amont
Cette couche se compose des champs suivants, avec quelques informations sur l'historique de requête
id integer,
region_zone_hydro text,
idsplit integer, -- identifiant du tronçon
source integer, -- voir ci-dessous
target integer,-- obtenus avec le code :
Code:
DROP EXTENSION IF EXISTS pgrouting CASCADE; CREATE EXTENSION pgrouting; alter table splitang add column source integer; alter table splitang add column target integer; select pgr_createTopology('splitang', 0.1, the_geom:='geom', id:='idsplit', source:='source', target:='target'); DROP TABLE IF EXISTS splitang_vertices_pgr CASCADE; select pgr_createVerticesTable('splitang', the_geom:='geom', source:='source', target:='target');
max numeric, -- est la valeur du tronçon = étape 3/ du descriptif ci-dessus, ou (A) du schéma
classe numeric, -- de 0 (poids sans impact) à 6 (poids très impactant) en fonction de la valeur du tronçon (max) = étape 4/
classe_corr numeric, -- pondération des tronçons en deux temps :
-- --- 1/correction éventuelle de la classe du tronçon en fonction de la valeur d'un point situé exactement au niveau de la source du tronçon (à l'aval pour mon cas) = étape 5/
-- --- 2/ propagation de la nouvelle classe de l'aval à l'amont = étape 6
geom geometry(LineString,2154)
Voilà.... J'espère avoir été plus plus claire...
Sinon, n'hésitez pas !
Merci
Hors ligne
#10 Thu 05 October 2017 15:51
- tumasgiu
- Membre
- Lieu: Ajaccio
- Date d'inscription: 5 Jul 2010
- Messages: 1160
Re: Aide sur requête recursive
Salut,
j'ai pu testé de mon coté avec votre échantillon,
et je n'arrive pas au problème que vous évoquez.
Donc j'en déduis que comme Nicolas, je n'ai pas réellement compris
ce que vous vouliez.
pré-conditions de la requête:
Les tronçons sont tous connectés.
la valeur source d'un tronçon est égale à la valeur target
des tronçons connectés en aval.
Pas de boucle dans le réseau.
Ce que la requête fait :
Mise à jour de classe_cor de tout les tronçons avec la valeur maximum des
tronçons connectés en aval, si celle ci est supérieure à la valeur de classe_cor,
en respectant l'ordre topologique.
Post-conditions:
Chaque tronçon a une valeur classe_cor supérieure ou égale à celles de ses connections en aval,
soit :
Code:
SELECT NOT EXISTS( SELECT t.idsplit, t2.idsplit, t.classe_cor, t2.classe_cor FROM test.meonais t JOIN test.meonais t2 ON t2.target = t.source WHERE t.classe_cor < t2.classe_cor); -- doit renvoyer vrai
Dernière modification par tumasgiu (Thu 05 October 2017 16:55)
Hors ligne
#11 Mon 09 October 2017 11:04
- meonais
- Participant occasionnel
- Date d'inscription: 17 Jan 2017
- Messages: 35
Re: Aide sur requête recursive
Bonjour tumasgiu,
Bonjour Nicolas
Je vous remercie pour vos réponses.
J'ai passé quelque heures à faire les tests séparés avec l'ensemble de mes données.
Avec les compléments d'information apportés par tumasgiu, je pense que j'ai isolé d'où vient mon problème :
- le test sur les bassins versants méditerranéens marche à merveille avec la requête fournie (encore merci)
- par contre, sur le grand bassin versant du Rhône, la récursive bloque, et c'est là que je dois relancer plusieurs fois manuellement pour obtenir le résultat.
Donc vous aviez bien compris ma demande et :
pré-conditions de la requête:
Les tronçons sont tous connectés.
la valeur source d'un tronçon est égale à la valeur target des tronçons connectés en aval.
==> Oui, par bassin versant, sauf que certains target sont équivalents à plusieurs sources (bras de cours d'eau)
Pas de boucle dans le réseau.
==> Par contre là... voici une image de ce que je peux avoir sur le réseau correspondant au bassin du Rhône, ce qui pourrait correspondre aux boucles évoquées ? :
[img]http://imagizer.imageshack.us/v2/640x480q90/923/OFzlak.jpg[/img]
Et je confirme le reste des précisions de tumasgiu.
Peux-t-on gérer ces "boucles" de façon à obtenir le résultat en une seule fois ?
D'avance merci
Hors ligne
#12 Tue 10 October 2017 11:03
- tumasgiu
- Membre
- Lieu: Ajaccio
- Date d'inscription: 5 Jul 2010
- Messages: 1160
Re: Aide sur requête recursive
- le test sur les bassins versants méditerranéens marche à merveille avec la requête fournie (encore merci)
- par contre, sur le grand bassin versant du Rhône, la récursive bloque, et c'est là que je dois relancer plusieurs fois manuellement pour obtenir le résultat.
Que voulez vous dire exactement ?
La requête est lancée sur l'ensemble des bassins versants, et les résultats ne sont corrects que sur une partie ?
La requête est lancée par bassins, et bloque sur certains ?
Que veut dire bloquer ? La requête se termine ? avec un message d'erreur ?
Pas de boucle dans le réseau.
==> Par contre là... voici une image de ce que je peux avoir sur le réseau correspondant au bassin du Rhône, ce qui pourrait correspondre aux boucles évoquées ? :
Je n'ai pas employé la terminologie exacte, je voulais parler de cycle
(on parle aussi de circuit dans le cas des graphes orientés) ,
Les cycles d'un graphe sont tout les chemins dont le sommet de départ est égale au sommet d'arrivée.
en tenant compte du sens des arcs si on se trouve dans un graphe orienté ce qui est votre cas.
Dernière modification par tumasgiu (Tue 10 October 2017 11:14)
Hors ligne
#13 Tue 10 October 2017 11:55
- meonais
- Participant occasionnel
- Date d'inscription: 17 Jan 2017
- Messages: 35
Re: Aide sur requête recursive
Bonjour tumasgiu,
Que voulez vous dire exactement ?
La requête est lancée sur l'ensemble des bassins versants, et les résultats ne sont corrects que sur une partie ?
La requête est lancée par bassins, et bloque sur certains ?
Oups pardon, effectivement j'ai oublié une partie...
Alors j'ai procédé par étape pour tester :
- étape 1 : application du code sur l'extraction que je vous ai envoyé (qui ne contient que les entités des bassins côtiers) : ça fonctionne
- étape 2 : application du code sur la couche contenant l'ensemble de mes données. Deux tests avec sélection des secteurs, voir le code modifié ci-dessous
Code:
DROP FUNCTION IF EXISTS pg_temp.upd(t text) CASCADE; CREATE FUNCTION pg_temp.upd(t text) RETURNS VOID AS $$ BEGIN EXECUTE 'UPDATE test t SET classe_corr = GREATEST(classe_corr, (SELECT max(classe_corr) FROM test t2 WHERE t2.target = t.source)) WHERE t.idsplit IN (' || t || ' )'; END; $$ LANGUAGE plpgsql; WITH RECURSIVE rec(depth, idsplit, s, e) AS( SELECT 0, t.idsplit, t.source , t.target, t.region_zone_hydro FROM test t LEFT JOIN test t2 ON t.source = t2.target WHERE t2.target IS NULL UNION SELECT depth + 1, t.idsplit, t.source, t.target, t.region_zone_hydro FROM rec JOIN test t ON rec.e = t.source WHERE t.region_zone_hydro NOT IN ('Côtiers Méditerranéens') ) SELECT pg_temp.upd(string_agg(f.idsplit::text, ',')) FROM (SELECT max(depth) depth, idsplit FROM rec GROUP BY idsplit) f WHERE depth > 0 GROUP BY depth ORDER BY depth;
Avec NOT IN ('Côtiers Méditerranéens') : le bassin du Rhône est correctement traité, en lançant la requête une seule fois - les bassins côtiers ne sont pas traités évidemment
Avec IN ('Côtiers Méditerranéens') : les bassins côtiers sont correctement traités, en lançant la requête une seule fois - le grand bassin du Rhône n'est pas traité évidemment
- étape 3 : application du code sur la couche contenant l'ensemble de mes entités (bassins côtiers et du Rhône), sans filtres sur les secteurs ==> pas de message d'erreur mais le résultat n'est que partiel, sur l'ensemble des entités de la couche (voir les illustrations du post du 2 octobre à 16h13). Il faut que je relance plusieurs fois la requête, dans la même configuration, pour avoir les résultats corrects sur l'ensemble des bassins versants (entités).
Je n'ai pas employé la terminologie exacte, je voulais parler de cycle
(on parle aussi de circuit dans le cas des graphes orientés) ,
Les cycles d'un graphe sont tout les chemins dont le sommet de départ est égale au sommet d'arrivée.
en tenant compte du sens des arcs si on se trouve dans un graphe orienté ce qui est votre cas.
Si j'ai bien compris, et si j'ai bien vérifié mes données , il n'y a normalement pas de cycle dedans...
Hors ligne
#14 Tue 24 October 2017 14:06
- tumasgiu
- Membre
- Lieu: Ajaccio
- Date d'inscription: 5 Jul 2010
- Messages: 1160
Re: Aide sur requête recursive
Si vous n'avez pas réussi à résoudre votre problème,
la seule chose qui me vient spontanément, est que vos
deux sous-ensembles (Bassin Rhône vs. Cotes Méditerranéennes)
doivent posséder des valeurs de champ identiques, ce qui empêcherait
la requête de s'exécuter correctement.
Est ce que les champs idsplit, source et target sont cohérents ?
çàd pas partagés entre vous deux sous-ensembles ?
Dernière modification par tumasgiu (Wed 25 October 2017 09:56)
Hors ligne