#1 Tue 12 December 2017 13:41
- V.LEONARD38
- Participant occasionnel
- Date d'inscription: 18 Jan 2016
- Messages: 18
QGIS / Bdmanager: Constructeur De Requete
Bonjour,
Je rencontre un problème avec le constructeur de requête. Je ne maîtrise pas bien le langage SQL, du coup je ne parviens pas à le résoudre.
J'ai fait une requête qui me permet de faire une jointure spatiale entre une couche polygone (une couche buffer) et une couche de points, afin d'affecter une information de la couche de point sur la couche buffer (à un point correspond un buffer)
Elle se présente comme ceci :
Code:
SELECT "Buffer"."Buffer_id", "Buffer"."Buffer_Id2", "Points"."code_1", "Points."code_2" FROM "Point","Buffer" WHERE ST_Intersects("Point"."geometry","Buffer"."geometry")
Cette requête fonctionne très bien. Mais la couche Points comporte moins d'entités que la couche buffer.
Pour affecter un code_1/code_2 à tous les buffer, il me faut effectuer la même opération avec d'autres couches de point (appellons-les Points_2 et Points_3).
J'ai donc tenté de construire une requête qui fasse cette opération en une seule fois mais je ne parviens pas à en construire une qui fonctionne de par mon manque de connaissance du SQL. Je vous liste mes différentes tentatives :
- 1ere tentative :
Code:
SELECT "Buffer"."Buffer_id", "Buffer"."Buffer_Id2", "Points"."code_1", "Points"."code_2", "Points_2"."code_1", "Points_2"."code_2", "Points_3"."code_1", "Points_3"."code_2", FROM "Points","Points_2","Points_3","Buffer", WHERE ST_Intersects ("Points"."geometry","Buffer"."geometry") OR (ST_Intersects ("Points_2"."geometry","Buffer"."geometry") OR ST_Intersects ("Points_3"."geometry","Buffer"."geometry")
- 2eme tentative :
Code:
SELECT "Buffer"."Buffer_id", "Buffer"."Buffer_Id2", "Points"."code_1", "Points"."code_2", "Points_2"."code_1", "Points_2"."code_2", "Points_3"."code_1", "Points_3"."code_2", FROM "Points","Points_2","Points_3","Buffer", WHERE (ST_Intersects ("Points"."geometry","Buffer"."geometry") OR (ST_Intersects ("Points_2"."geometry","Buffer"."geometry") OR ST_Intersects ("Points_3"."geometry","Buffer"."geometry"))
3eme tentative :
Code:
SELECT "Buffer"."Buffer_id", "Buffer"."Buffer_Id2", "Points"."code_1", "Points"."code_2", "Points_2"."code_1", "Points_2"."code_2", "Points_3"."code_1", "Points_3"."code_2", FROM "Points","Points_2","Points_3","Buffer", WHERE ST_Intersects (("Points"."geometry","Buffer"."geometry") OR ("Points_2"."geometry","Buffer"."geometry") OR ("Points_3"."geometry","Buffer"."geometry"))
A chaque tentative me revient cette erreur :
Code:
Query execution error on CREATE TEMP VIEW _tview AS SELECT "Buffer"."Buffer_id", "Buffer"."Buffer_Id2", "Points"."code_1", "Points"."code_2", "Points_2"."code_1", "Points_2"."code_2", "Points_3"."code_1", "Points_3"."code_2", FROM "Points","Points_2","Points_3","Buffer", WHERE ST_Intersects (("Points"."geometry","Buffer"."geometry") OR ("Points_2"."geometry","Buffer"."geometry") OR ("Points_3"."geometry","Buffer"."geometry"))
Y'a t'il une formulation correcte pour effectuer cette opération (si c'est possible).
En vous remerciant,
Valentin
Dernière modification par V.LEONARD38 (Tue 12 December 2017 13:46)
Hors ligne
#2 Tue 12 December 2017 14:18
- tumasgiu
- Membre
- Lieu: Ajaccio
- Date d'inscription: 5 Jul 2010
- Messages: 1160
Re: QGIS / Bdmanager: Constructeur De Requete
Salut,
votre requête devrait s'écrire avec des OUTER JOINS
Code:
SELECT buffer_id, point1.code code1, point2.code code2 FROM buffer LEFT OUTER JOIN point1 ON st_intersects(buffer.geom, point1.geom) LEFT OUTER JOIN point2 ON point1.id IS NULL AND st_intersects(buffer.geom, point2.geom) etc.. . . .
Une jointure externe, ici gauche, entre deux ensembles produit l'union
des éléments de l'ensemble se trouvant à gauche de la jointure
n'ayant pas de relation avec l'ensemble de droite,
ainsi que chaque combinaison issue des relations trouvées.
Les colonnes de l'ensemble de droite des éléments n'ayant pas trouvé de correspondance
ont comme valeur la valeur nulle.
Comme disait quelqu'un que je connais un petit dessin vaut mieux qu'un grand discours
https://fr.wikipedia.org/wiki/Jointure_(informatique)
Dernière modification par tumasgiu (Tue 12 December 2017 15:46)
Hors ligne
#3 Thu 14 December 2017 15:10
- V.LEONARD38
- Participant occasionnel
- Date d'inscription: 18 Jan 2016
- Messages: 18
Re: QGIS / Bdmanager: Constructeur De Requete
Bonjour,
Merci pour votre réponse.
Je n'ai, en ce moment, pas le temps de tester votre solution. Probablement la semaine prochaine. mais merci du coup de main !
Cordialement,
Valentin
Dernière modification par V.LEONARD38 (Thu 14 December 2017 15:11)
Hors ligne