Annonce
Pour sa 21ème année, l’association GeoRezo a toujours besoin de vous !
10€ = 1 mois de frais bancaires ; 15€ = 12 mois de nom de domaine ; 30€ = 1 semaine de location des serveurs …
Retrouver nos membres bienfaiteurs
#1 Mon 28 February 2022 18:20
- cedbat
- Participant occasionnel
- Lieu: Lille
- Date d'inscription: 20 Jan 2019
- Messages: 20
PostGres SQL - ERREUR État SQL : 21000
Bonjour,
J'ai une table commune et une table departement. J'aimerais insérer dans la colonne departement.population les résultats d'une requête spatiale me permettant de recenser la population par département.
Voici ma requête :
UPDATE departement SET population = (SELECT sum (commune.population) AS population
FROM commune, departement
WHERE st_contains (departement.geom, commune.geom)
GROUP BY departement.nom_dept);
PGAdmin me renvoie l'erreur suivante :
ERREUR : ERREUR: plus d'une ligne renvoyée par une sous-requête utilisée comme une expression
État SQL : 21000
J'ai beau cherché, je n'arrive pas à trouver la solution... Quelqu'un pourrait-il me venir en aide s'il vous plait ?
Cédric
Hors ligne
#2 Tue 01 March 2022 10:03
- cedbat
- Participant occasionnel
- Lieu: Lille
- Date d'inscription: 20 Jan 2019
- Messages: 20
Re: PostGres SQL - ERREUR État SQL : 21000
Je pense avoir réussi avec la requête suivante :
update departement set population =
(select sum(population)
from commune
where st_contains (departement.geom, commune.geom));
Maintenant, j'ai un peu de mal à comprendre pourquoi cette requête plutôt que la précédente...
Hors ligne
#3 Tue 01 March 2022 10:55
- tumasgiu
- Membre
- Lieu: Ajaccio
- Date d'inscription: 5 Jul 2010
- Messages: 1160
Re: PostGres SQL - ERREUR État SQL : 21000
Salut,
le message d'erreur de votre première requête est explicite : la sous expression de votre update (SELECT...GROUP BY departement.nom_dept)
renvoie plusieurs lignes. Dans celle-ci vous réferencez une seconde fois la table departement dans la clause FROM, et PostgreSQL comprends que vous voulez la joindre en entier avec la table commune et pas juste avec la ligne en cours de mise à jour.
Hors ligne
#4 Tue 01 March 2022 12:20
- cedbat
- Participant occasionnel
- Lieu: Lille
- Date d'inscription: 20 Jan 2019
- Messages: 20
Re: PostGres SQL - ERREUR État SQL : 21000
Merci beaucoup pour vos explications qui, bien que très claires, restent confuses pour moi ^^
Dernière modification par cedbat (Tue 01 March 2022 12:32)
Hors ligne
#5 Tue 01 March 2022 12:29
- cedbat
- Participant occasionnel
- Lieu: Lille
- Date d'inscription: 20 Jan 2019
- Messages: 20
Re: PostGres SQL - ERREUR État SQL : 21000
Je pensais que j'étais obligé de renseigner la table departement dans la clause FROM à partir du moment où j'utilise le champ departement.geom dans la condition WHERE
Mais j'imagine que ce n'est pas le cas à cause du UPDATE departement...
Dernière modification par cedbat (Tue 01 March 2022 12:31)
Hors ligne
#6 Tue 01 March 2022 12:51
- Nicolas Ribot
- Membre
- Lieu: Toulouse
- Date d'inscription: 9 Sep 2005
- Messages: 1554
Re: PostGres SQL - ERREUR État SQL : 21000
Quid des communes hors de leur département (enclaves) ?
Pourquoi faire une jointure spatiale ? code_dept suffit pour grouper les communes par département.
Nicolas
Hors ligne
#7 Tue 01 March 2022 14:12
- cedbat
- Participant occasionnel
- Lieu: Lille
- Date d'inscription: 20 Jan 2019
- Messages: 20
Re: PostGres SQL - ERREUR État SQL : 21000
Bonjour Nicolas,
Oui j'aurais pu faire une jointure classique bien que je n'ai pas le champ code_dept renseigné dans ma table commune.
Il m'aurait alors suffi de faire ceci :
ALTER TABLE commune ADD code_dept VARCHAR (2) ;
UPDATE commune SET code_dept = SUBSTR (code_insee, 1, 2) ;
J'aurais ainsi pu effectuer ma jointure avec la requête suivante :
UPDATE departement SET population = (
SELECT SUM(commune.population)
FROM commune
WHERE commune.code_dept = departement.code_dept
);
C'est bien ça ?
Quoiqu'il en soit, il s'agit ici d'un exercice sur les jointures spatiales, ce qui explique ma démarche :-)
Hors ligne
#8 Tue 01 March 2022 16:27
- tumasgiu
- Membre
- Lieu: Ajaccio
- Date d'inscription: 5 Jul 2010
- Messages: 1160
Re: PostGres SQL - ERREUR État SQL : 21000
Code:
Mais j'imagine que ce n'est pas le cas à cause du UPDATE departement...
C'est exactement çà, cela revient, si vous voulez, à avoir une table "temporaire" contenant une seule ligne, celle-qui est en cours de mise à jour.
Dernière modification par tumasgiu (Tue 01 March 2022 16:34)
Hors ligne