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 !.
Nom d'utilisateur    Mot de passe              Toujours pas inscrit ?   Mot de passe oublié ?

#1 lun. 11 juin 2018 16:14

Erwin ZLOTY
Membre
Date d'inscription: 3 sept. 2013
Messages: 13

QGIS: Jointure CSV sur couche postgis

Bonjour à tous,

Je cherche à faire une jointure (ajout de 2 colonnes) d'un csv selon une colonne (de code) avec une couche de polygones déjà présente sur ma bdd postgis. Je sais faire une jointure sur QGIS, mais pas autrement. Quelqu'un pourrait m'expliquer de manière détaillée (je suis assez débutant) quelle sont les options possibles svp ?

Erwin

Hors ligne

 

#2 lun. 11 juin 2018 17:03

Mathieu Denat
Membre
Lieu: Montpellier
Date d'inscription: 5 mai 2010
Messages: 78

Re: QGIS: Jointure CSV sur couche postgis

Bonjour,

Le plus simple à mon avis est d'ajouter ton fichier CSV à ta base de données par un glisser déposer depuis le gestionnaire de base de données de Qgis (menu base de données dans Qgis 3).

Ensuite 2 solutions:
Soit tu fais ta jointure dans une requête postgresql, ex à adapter avec a ta couche existante, b ta couche à joindre et "code" le champ qui servira à faire la jointure:

Code:

select a.*, b.colonne_jointe1, b.colonne_jointe2
from a join b  using(code);

Soit dans Qgis:
- ouvrir les deux couches (poolygones + table de jointure (le csv importé à l'étape suivante)
- dans les propriété de la couche polygone, ajouter une jointure (de la manière classique que tu sembles connaître).

Bonne continuation.


Mathieu
C'est en forgeant qu'on devient forgeron

Hors ligne

 

#3 lun. 11 juin 2018 17:55

Erwin ZLOTY
Membre
Date d'inscription: 3 sept. 2013
Messages: 13

Re: QGIS: Jointure CSV sur couche postgis

Merci pour ta réponse, j'ai essayé tes 2 options:

- la 1ère m'indique un message d'erreur :

select guyane_sirene_test.*, codes_naf_2.categorie_ov_1, codes_naf_2.ss_categorie_ov_1
from guyane_sirene_test join codes_naf_2  using(apet700);

ERROR:  ERREUR:  la relation « guyane_sirene_test » n'existe pas
LINE 2: from guyane_sirene_test join codes_naf_2  using(apet700);
             ^
SQL state: 42P01
Character: 83


- la 2ème option, la jointure a fonctionné mais n’apparaît pas ma BDD, il faut enregistrer la jointure quelque part ?

Hors ligne

 

#4 mar. 12 juin 2018 10:10

Mathieu Denat
Membre
Lieu: Montpellier
Date d'inscription: 5 mai 2010
Messages: 78

Re: QGIS: Jointure CSV sur couche postgis

Re,

Pour la première solution, l'erreur est explicite! wink
Elle t'indique qu'il n'existe pas de couche nommée "guyane_sirene_test" .
Il faut vérifer l'orthographe ou essayer avec des guillemets (si la couche existe):

Code:

from "guyane_sirene_test" blabla

.

Pour la 2ème option, si tu veux enregistrer ta jointure, tu peux l'enregistrer sous puis la refaire glisser/déposer dans le schéma de ton choix sur ton serveur. Cette solution marchera néanmoins si tu souhaites avoir quelque chose de "plus propre" l'idéal est de passer directement par des requêtes postdesql, ex:

Code:

CREATE TABLE guyane.ma_nouvelle_table AS (
SELECT a.*, codes_naf_2.categorie_ov_1, codes_naf_2.ss_categorie_ov_1
FROM a join codes_naf_2  USING(apet700) ) ;

Tu peux aussi créer une vue plutôt en remplaçant le CREATE TABLE par CREATE VIEW

Dans tous les cas un petit peu de lecture t'aidera à bien cerner ce que font les jointures (ne t'encombre pas avec les mots clés INNER et OUTER, leur usage est inutile dans de nombreux cas (notamment dans le tien)).
http://sql.sh/cours/jointures .

Attention par défaut, le mot clé JOIN fait un INNER JOIN (voir schéma sur le site que je t'ai donné).
Et je pense que qgis fait un LEFT JOIN.
Si tu veux garder les enregistrements sans correspondance, il faudra utiliser LEFT JOIN.

Le résultat de ta jointure s'ouvre alors comme n'importe quelle table de ton serveur PostGIS.
Bonne journée.


Mathieu
C'est en forgeant qu'on devient forgeron

Hors ligne

 

#5 mar. 12 juin 2018 11:12

Erwin ZLOTY
Membre
Date d'inscription: 3 sept. 2013
Messages: 13

Re: QGIS: Jointure CSV sur couche postgis

Ca a marché, j'avais oublié de préciser schema.table. Merci beaucoup smile

Par contre, ca m'ajoute des colonnes à la fin, pas de problème pour cette table là, mais si pour les prochaines fois je veux les intégrer à des colonnes vides déjà présentes dans la table, que faut-il ajouter ??

Hors ligne

 

#6 mar. 12 juin 2018 12:30

Mathieu Denat
Membre
Lieu: Montpellier
Date d'inscription: 5 mai 2010
Messages: 78

Re: QGIS: Jointure CSV sur couche postgis

Re,

En SQL:
Soit il faut le gérer dans le SELECT (si le champ de la table source est vide ou peut être perdu), ex:

Code:

SELECT a.nom_commune, a.truc, a.machin, b.code_insee insee
FROM a join b  USING(id) ) ;

Dans ce cas le champ code_insee de la table jointe est renommé insee (et remplace le champ insee de la table a).

Avec Qgis:
Utiliser la calculatrice de champ pour écrire les données jointes dans la couche d'origine.
(remarque: on peut faire la même chose avec un UPDATE en SQL).

Bonne continuation.


Mathieu
C'est en forgeant qu'on devient forgeron

Hors ligne

 

Pied de page des forums

Powered by FluxBB

Partagez  |