#1 Mon 11 June 2018 16:14
- Erwin ZLOTY
- Participant occasionnel
- Date d'inscription: 3 Sep 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 Mon 11 June 2018 17:03
- Mathieu Denat
- Participant actif
- Lieu: Montpellier
- Date d'inscription: 5 May 2010
- Messages: 110
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 Mon 11 June 2018 17:55
- Erwin ZLOTY
- Participant occasionnel
- Date d'inscription: 3 Sep 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 Tue 12 June 2018 10:10
- Mathieu Denat
- Participant actif
- Lieu: Montpellier
- Date d'inscription: 5 May 2010
- Messages: 110
Re: QGIS: Jointure CSV sur couche postgis
Re,
Pour la première solution, l'erreur est explicite!
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 Tue 12 June 2018 11:12
- Erwin ZLOTY
- Participant occasionnel
- Date d'inscription: 3 Sep 2013
- Messages: 13
Re: QGIS: Jointure CSV sur couche postgis
Ca a marché, j'avais oublié de préciser schema.table. Merci beaucoup
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 Tue 12 June 2018 12:30
- Mathieu Denat
- Participant actif
- Lieu: Montpellier
- Date d'inscription: 5 May 2010
- Messages: 110
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