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

Rencontres QGIS 2025

L'appel à participation est ouvert jusqu'au 19 janvier 2025!

#1 Tue 21 June 2022 16:45

Guénolé MAINSANT
Juste Inscrit !
Date d'inscription: 27 Jan 2021
Messages: 9

QGIS/Jointure: Full or Inner ? > jointure attributaire et requete SQL

Bonjour,

j'ai deux shapes: un de bonne géométrie mais avec des champs manquants (A) et un 2eme de mauvaise géométrie mais avec des champs utiles (B).

Ils partagent tous les deux un ID commun mais il y a des entités manquantes sur la 2eme par rapport à la 1ere couche et vis versa.

Donc j'aimerais faire un FULL JOIN

J'ai 2 problèmes sur 2 méthodes différentes

1/ avec la jointure attributaire classique de QGIS, il me fait un INNER JOIN et non un FULL JOIN par défaut, je perds donc les entités de la deuxième couche qui ne sont pas sur la 1ere couche.

Y'a t il une option pour faire passer les jointures en FULL ?

2/ j'essaye donc avec DBmanager et les couches virtuels

------------
SELECT *
FROM A
FULL JOIN B
on A.ID = B.ID
-----------

mess error : Query execution error on CREATE TEMP VIEW _tview AS SELECT * FROM A FULL JOIN B on A.ID = B.ID: 1 - RIGHT and FULL OUTER JOINs are not currently supported


https://zupimages.net/up/22/25/6hy6.png

apparemment, on peut pas non plus, sauf erreur de ma part.

Merci d'avance pour toute aide

Dernière modification par Guénolé MAINSANT (Tue 21 June 2022 16:46)

Hors ligne

 

#2 Tue 21 June 2022 17:57

bbk9
Participant occasionnel
Date d'inscription: 7 Jan 2022
Messages: 24

Re: QGIS/Jointure: Full or Inner ? > jointure attributaire et requete SQL

Bonjour,
si vous pouvez les mettre en bdd, vous pouvez peut-être essayer ça:

1) corriger les geoms de la table B:

with tA as (select id, geom from A)
    update B
        set B.geom = tA.geom
            where B.id = tA.id;

Vous devriez avoir une table B avec tous les bons champs et les bonnes geom (sauf pour celles qui sont dans B mais pas dans A) moins les entités qui sont dans A mais pas dans B.

Il vous reste alors à :

2) récupérer les lignes de A à intégrer à B. Si les champs de A et B sont de même type, même nom et même ordre ça peut ressembler à ça :
create table AB as (
    select * from B
        union
    select * from A
        where A.id not in (select id from B)
);

reste alors à corriger ces nouveaux champs issus de A et a priori sans équivalents dans B si j’ai bien compris.
J’espère vous indiquer une bonne piste, bon courage!

Hors ligne

 

#3 Wed 22 June 2022 13:43

Guénolé MAINSANT
Juste Inscrit !
Date d'inscription: 27 Jan 2021
Messages: 9

Re: QGIS/Jointure: Full or Inner ? > jointure attributaire et requete SQL

impossible d'installer un BDD et un client ici. Y'en a t il vraiment besoin ?

Merci quand même, l'info est utile.

Dernière modification par Guénolé MAINSANT (Wed 22 June 2022 13:44)

Hors ligne

 

#4 Wed 22 June 2022 16:30

shirosaki
Participant actif
Lieu: Lyon
Date d'inscription: 30 Mar 2018
Messages: 125

Re: QGIS/Jointure: Full or Inner ? > jointure attributaire et requete SQL

Bonjour,
j'ai testé de mon coté et effectivement, les FULL joins ne semble pas encore être supportés dans les couches virtuelles, bizarre.

Vous pouvez essayer la méthode suivante cependant,

Lancer l'algo "Joindre les attributs par valeur de champ" (trouvable dans la boite à outils de traitement)

Paramétrer comme ceci :

Couche source : 'A'

Champ de la table : 'ID'

Couche en entrée 2 : 'B'

Champ de la table 2 :'ID'

Couche 2 champs à copier (tous les champs sauf 'ID', si ce dernier est coché il créera un champ 'ID_2', qui n'a pas d'utilité

Type de jointure : prendre uniquement les attributs de la première ...

Préfixe de champ : laisser vide

Couche issus de la jointure : enregistrer votre couche où vous voulez

Entités non joignable à partir de la première couche : enregistrer cette couche <-- par défaut cette sortie est ignorée

ensuite, prenez les entités de la couche "Entités non joignable à partir de la première couche" et copier les dans la couche "Couche issus de la jointure".

Ca devrait être bon et être le résultat d'un full join

Dernière modification par shirosaki (Wed 22 June 2022 16:31)


Paul QUESNOT

Hors ligne

 

Pied de page des forums

Powered by FluxBB