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 Fri 03 April 2020 18:18

ODJAC33
Participant assidu
Date d'inscription: 6 Aug 2017
Messages: 240

QGIS: Lien entre 2 tables pour selection

Bonjour à tous,

Je voudrais sélectionner des éléments d'une table T1 (comprenant 6 objets) suivant des valeurs de champs d'une autre table T2 (comprenant 4 objets). Ce sont des segments de routes aériennes.

Prenons un exemple très concret pour bien illustrer mon problème.

Ma table T1 comprend le champ Flux, dont les valeurs pour les 6 objets de la table, numérotés (o1), (o2), (o3), (o4) , (o5) et (o6), sont  :
- pour (o1) : UMOXA-EBOMO,
- pour (o2) : UMOXA-BADUR,
- pour (o3) : UMOXA-FEJAC,
- pour (o4) : EBOMO-BADUR,
- pour (o5) : EBOMO-FEJAC
- pour (o6) : BADUR-FEJAC.

Ma table T2 comprend 3 champs (Flux1 , Flux2 et Flux3 ) dont les valeurs pour les 4 objets de la table, numérotés (o'1), (o'2), (o'3) et (o'4), sont  : :
- Flux1 : UMOXA-EBOMO pour l'objet (o'1) et UMOXA-BADUR pour l'objet (o'2)
- Flux2 : EBOMO-BADUR pour l'objet (o'3)
- Flux3 : BADUR-FEJAC pour l'objet (o'4)

Je souhaiterais sélectionner dans la table T1 uniquement les 4 objets que l'on retrouve dans la table T2. Il s'agira donc des objets : (o1), (o2) , (o4) et (o6)) .
J'ai fait plein d'essais non concluants car je n'arrive pas à faire une jointure propre entre les 2 tables (dont la structure, je vous l'accorde, n'est pas la même, ce qui explique certainement le problème).

Que me conseilleriez-vous?
A titre info mes 2 bases comprennent beaucoup plus d'objets, mais, déjà, si j'arrive à résoudre le problème énoncé ci-dessus, je pourrai appliquer la solution à des bases nettement plus grandes.

Merci d'avance.

Hors ligne

 

#2 Fri 03 April 2020 19:27

carteq
Participant assidu
Date d'inscription: 8 Mar 2008
Messages: 829

Re: QGIS: Lien entre 2 tables pour selection

Select * from [TableA] where [Flux] in

(Select [Flux1] from [TableB] where [Flux1] <> ""
Union
Select [Flux2] from [TableB] where [Flux2] <> ""
Union
Select [Flux3] from [TableB] where [Flux3] <> "")

Hors ligne

 

#3 Sat 04 April 2020 17:44

ODJAC33
Participant assidu
Date d'inscription: 6 Aug 2017
Messages: 240

Re: QGIS: Lien entre 2 tables pour selection

Merci beaucoup, c'est vrai que je raisonne beaucoup plus en jointures de tables au lieu d'effectuer des requêtes SQL, nettement plus efficaces et puissantes.

J'ai trouvé 329 objets après avoir exécuté ma requête au lieu de 490, mais je vais regarder cela de plus près pour savoir d'où vient cette erreur.

Petite question, y a t'il un moyen d'apprendre simplement et rapidement les bases du SQL?
Le constructeur de requêtes de QGIS m'a l'air bien fait, mais, sans les bases, ....

Encore merci à vous.

Hors ligne

 

#4 Sat 04 April 2020 19:11

carteq
Participant assidu
Date d'inscription: 8 Mar 2008
Messages: 829

Re: QGIS: Lien entre 2 tables pour selection

J'ai appris avec ce livre :
https://www.amazon.ca/SQL-Queries-Mere- … amp;sr=8-1

Ça couvre le non-spatial. C'est en anglais.  Ajouter le spatial ensuite est assez simple. Les fonctions de SpatiaLite sont ici :
http://www.gaia-gis.it/gaia-sins/spatia … 4.2.0.html

Hors ligne

 

#5 Sun 05 April 2020 11:02

ODJAC33
Participant assidu
Date d'inscription: 6 Aug 2017
Messages: 240

Re: QGIS: Lien entre 2 tables pour selection

OK, merci, je vais explorer cela.
J'ai trouvé mon erreur, la différence était due que j'avais des doublons dans l'une de mes tables.
Donc votre requête fonctionne parfaitement, encore merci.

Hors ligne

 

#6 Sun 05 April 2020 11:51

GeoSignature
Participant occasionnel
Lieu: Saint-Pierre-des-Nids
Date d'inscription: 12 Nov 2019
Messages: 34

Re: QGIS: Lien entre 2 tables pour selection

Petite question, y a t'il un moyen d'apprendre simplement et rapidement les bases du SQL?


Pour apprendre le SQL, je trouve ce site très complet :
https://sql.sh/
(1er résultat du moteur de recherche G**gle avec "sql" wink )
Ensuite, si vous avez des questions spécifiques, non spatiales (si c'est spatial, vous pouvez poster ici dans la rubrique BDD), vous pouvez les poser sur le Forum Developpez, rubrique SQL : https://www.developpez.net/forums/f37/b … ngage-sql/

Hors ligne

 

#7 Tue 07 April 2020 15:23

ODJAC33
Participant assidu
Date d'inscription: 6 Aug 2017
Messages: 240

Re: QGIS: Lien entre 2 tables pour selection

OK merci beaucoup Sylvain.

Hors ligne

 

#8 Fri 24 April 2020 16:53

ODJAC33
Participant assidu
Date d'inscription: 6 Aug 2017
Messages: 240

Re: QGIS: Lien entre 2 tables pour selection

Bonjour Sylvain, bonjour à tous,

Suite au échanges ci-dessous, je m'entraine dès que j'ai un peu de temps à faire des requêtes SQL.

Je bloque un peu sur les requêtes spatiales.

Je cherche tout simplement à ajouter une colonne X et une colonne Y à une base de données appelée eTodL93.
La géométrie de cette base est contenue dans un champs wkt_geom qui n'est pas visible dans la table attributaire (je fais un copier-coller de la table attributaire vers Excel pour le voir).

Lorsque je lance la requête :
SELECT *, ST_X(wkt_geom)   AS   X,
ST_Y(wkt_geom) AS Y FROM eTodL93

J'ai une erreur de syntaxe et il me dit qu'il ne connait pas la colonne wkt_geom.

et si je lance la requête :
SELECT *, ST_X(geometry)   AS   X,
ST_Y(geometry) AS Y FROM eTodL93

Il ne me renvoie que des valeurs NULL pour X et pour Y.

Merci de vos conseils.

Hors ligne

 

#9 Fri 24 April 2020 20:01

carteq
Participant assidu
Date d'inscription: 8 Mar 2008
Messages: 829

Re: QGIS: Lien entre 2 tables pour selection

Il faut vraiment spécifier tu travailles à partir de quoi : couche virtuelle, BD SQlite, Geopackage. Merci.

Tu peux voir la colonne géométrie dans le BD Manager, onglet info.

Hors ligne

 

#10 Sat 25 April 2020 11:41

ODJAC33
Participant assidu
Date d'inscription: 6 Aug 2017
Messages: 240

Re: QGIS: Lien entre 2 tables pour selection

C'est une couche virtuelle et le champ geometry est bien apparent dans l'onglet Infos.

Et pourtant la requête :
SELECT *, ST_X(geometry)   AS   X,
ST_Y(geometry) AS Y FROM eTodL93

Me renvoie des valeurs NULL pour X et Y.

La copie d'écran ci-jointe te donnera des informations complémentaires.

Merci encore.


Fichier(s) joint(s) :
Pour accéder aux fichiers vous devez vous inscrire.

Hors ligne

 

#11 Sat 25 April 2020 18:06

carteq
Participant assidu
Date d'inscription: 8 Mar 2008
Messages: 829

Re: QGIS: Lien entre 2 tables pour selection

J'ai testé sur un shapefile importé, aucun problème.

Hors ligne

 

#12 Sun 26 April 2020 11:50

ODJAC33
Participant assidu
Date d'inscription: 6 Aug 2017
Messages: 240

Re: QGIS: Lien entre 2 tables pour selection

Peux-tu voir ce que ça donne sur l'extrait ci-joint stp car je me retrouve toujours avec des valeurs NULL pour X et Y.

A titre info, la base de données contient bien un attribut geometry, mais je ne sais pas ce que contient ce champ (je ne le vois pas dans la table attributaire).
Je retrouve la géométrie des points dans l'attribut wkt_geom (non visible également dans la table attributaire mais visible par copier-coller de la table attributaire dans Excel) qui, pour le premier point, vaut (un nombre de décimales énorme, bizarre!):
PointZ (333097.46300014993175864 6273815.70800260547548532 73.76800000000000068)


Fichier(s) joint(s) :
Pour accéder aux fichiers vous devez vous inscrire.

Hors ligne

 

#13 Sun 26 April 2020 16:18

carteq
Participant assidu
Date d'inscription: 8 Mar 2008
Messages: 829

Re: QGIS: Lien entre 2 tables pour selection

Le DB Manager m'indique que ce n'est pas une table spatiale. Le Format Point25D n'est peut-être pas supporté. Le fait d'avoir 2 colonnes géométrie est peut-être confondant aussi.

(un nombre de décimales énorme, bizarre!):
PointZ (333097.46300014993175864 6273815.70800260547548532 73.76800000000000068)


333097.46300014993175864 = x
6273815.70800260547548532 = y
73.76800000000000068 = z

Hors ligne

 

#14 Sun 26 April 2020 17:42

ODJAC33
Participant assidu
Date d'inscription: 6 Aug 2017
Messages: 240

Re: QGIS: Lien entre 2 tables pour selection

Oui, chaque point est représenté par son x, y et z en PointZ.

Du coup, je ne peux avoir accès à aucune extension spatiale SQL avec ce type de géométrie?
Quel type de transformation dois-je faire pour que le DBManager reconnaisse cette table comme une table spatiale?

Merci.

Hors ligne

 

#15 Sun 26 April 2020 19:04

ODJAC33
Participant assidu
Date d'inscription: 6 Aug 2017
Messages: 240

Re: QGIS: Lien entre 2 tables pour selection

J'ai trouvé une méthode, je ne sais pas ce qu'elle vaut, mais au moins elle marche : j'ai exporté ma couche au format SpatialLite.

Hors ligne

 

#16 Mon 27 April 2020 01:10

carteq
Participant assidu
Date d'inscription: 8 Mar 2008
Messages: 829

Re: QGIS: Lien entre 2 tables pour selection

Le moteur SQL du BD Manager est celui de SQLite/SpatiaLite

Hors ligne

 

#17 Sun 03 May 2020 18:53

ODJAC33
Participant assidu
Date d'inscription: 6 Aug 2017
Messages: 240

Re: QGIS: Lien entre 2 tables pour selection

OK, merci.

Je progresse à mon rythme en SQL. J'ai un nouveau blocage.
La commande suivante (changement de l'altitude de l'objet d'identifiant 064BZ000386 de la couche virtuelle ExtraitTODSQL au format SQLITE) :
UPDATE ExtraitTODSQL
SET elevation = '102'
WHERE VSDesigna ='064BZ000594'

Me renvoie l'erreur de syntaxe suivante :
1 - near "UPDATE": syntax error

Hors ligne

 

#18 Sun 03 May 2020 19:01

ODJAC33
Participant assidu
Date d'inscription: 6 Aug 2017
Messages: 240

Re: QGIS: Lien entre 2 tables pour selection

Objet d'identifiant 064BZ000594

Hors ligne

 

#19 Mon 04 May 2020 14:11

carteq
Participant assidu
Date d'inscription: 8 Mar 2008
Messages: 829

Re: QGIS: Lien entre 2 tables pour selection

L'élévation ne nécessite pas de guillemets si c'est un nombre.

Hors ligne

 

#20 Mon 04 May 2020 18:43

ODJAC33
Participant assidu
Date d'inscription: 6 Aug 2017
Messages: 240

Re: QGIS: Lien entre 2 tables pour selection

C'est un double (Type reconnu Real), mais, même sans les guillemets, j'ai la même erreur de syntaxe.
Je vous joins la table (si vous avez le temps de tester cette petite mise à jour).
Merci beaucoup.


Fichier(s) joint(s) :
Pour accéder aux fichiers vous devez vous inscrire.

Hors ligne

 

#21 Wed 06 May 2020 01:47

carteq
Participant assidu
Date d'inscription: 8 Mar 2008
Messages: 829

Re: QGIS: Lien entre 2 tables pour selection

Votre extrait de fichier n'est pas valide selon QGIS 3.8

Hors ligne

 

#22 Sat 09 May 2020 12:21

ODJAC33
Participant assidu
Date d'inscription: 6 Aug 2017
Messages: 240

Re: QGIS: Lien entre 2 tables pour selection

J'utilise QGIS 3.4 et QGIS 3.12.

QGIS 3.4 reconnait cette couche comme une couche SpatiaLite et QGIS 3.12 (tout comme pour vous avec QGIS 3.8) ne la reconnait pas comme une couche SpatialLite.
Pourtant, avec QGIS 3.12, j'ai fait un test avec la requête très simple ci-dessous qui a très bien fonctionné.
SELECT * FROM ExtraitTODSQL WHERE elevation>70

Par contre, la requête UPDATE ExtraitTODSQL SET elevation = ‘102’ WHERE VSDesigna ='064BZ000594' me renvoie toujours le même message d'erreur : - near "UPDATE": syntax error que ce soit avec QGIS 3.12 ou QGIS 3.4.

Étrange tout cela ...
Merci encore.

Hors ligne

 

#23 Sat 09 May 2020 13:50

carteq
Participant assidu
Date d'inscription: 8 Mar 2008
Messages: 829

Re: QGIS: Lien entre 2 tables pour selection

Mon avis : SQLite et Spatialite, c'est pas terrible comparé à toutes les autres solutions. Je n'ai jamais eu de situations de ce genre avec un autre produit.

Travailler avec PostGIS est sûrement mieux, dans le domaine libre.

Dans les solution commerciales, pendant la présente crise sanitaire, Manifold 8 est en vente à 95$ US. (la version 9 aussi, mais je ne vous recommande pas cet excellent produit, car beaucoup trop complexe pour apprendre). La version 8 permet d'écrire du SQL, spatial ou non, sans limite. Et sans installer de SGBD. C'est mon outil pour le SQL depuis plus d'une décennie. (manifold.net)

Hors ligne

 

Pied de page des forums

Powered by FluxBB