Nous utilisons des cookies pour vous garantir la meilleure expérience sur notre site. Si vous continuez à utiliser ce dernier, nous considèrerons que vous acceptez l'utilisation des cookies. J'ai compris ! ou En savoir plus !.
banniere

Le portail francophone de la géomatique


Toujours pas inscrit ? Mot de passe oublié ?
Nom d'utilisateur    Mot de passe              Toujours pas inscrit ?   Mot de passe oublié ?

Annonce

Printemps des cartes 2024

#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: 1132

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: 1536

Re: PostGres SQL - ERREUR État SQL : 21000

Quid des communes hors de leur département (enclaves) ? wink

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: 1132

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

 

Pied de page des forums

Powered by FluxBB