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

Suite à un problème technique intervenu entre le 22 et le 23 mars, nous avons du procéder dans la soirée du 25 mars, à la restauration de la base de données du 24 mars (matinée).

En clair, nous avons perdu vos contributions et inscriptions du dimanche 24 et du lundi 25 mars.
Nous vous prions de nous excuser.

#1 Thu 12 July 2018 16:22

Olivier Pompier
Participant occasionnel
Date d'inscription: 8 Sep 2013
Messages: 49

Jointure sur adresse

Bonjour à la communauté,

Je bute sur une question dont je n'arrive pas à me dépêtrer,

J'ai d'un côté une table enquête dans laquelle sont renseignées des informations obtenues en porte à porte avec un champ numero de maison, un champ nom de rue, et un champ INSEE de la commune

J'ai de l'autre côté une couche de points avec une table adresse contenant de la même façon le numéro de maison, le nom de rue et l'id de la commune.

Ma question est: comment joindre ces tables avec ces 3 champs afin de visualiser sur la carte les informations du porte à porte. J'ai contourné le problème en concatenant les champs mais cela ne me paraît pas une solution ...

Merci

Hors ligne

 

#2 Fri 13 July 2018 00:43

tumasgiu
Membre
Lieu: Ajaccio
Date d'inscription: 5 Jul 2010
Messages: 1129

Re: Jointure sur adresse

Salut,

En SQL, on utlise le mot-clef INNER JOIN pour faire
une conjonction de deux tables.

Si les colonnes communes ont
des noms identiques dans les 2 tables :

Code:

SELECT * FROM adresse
INNER JOIN enquete USING(insee,nom,numero)

Si les noms diffèrent :

Code:

SELECT * FROM adresse 
INNER JOIN enquete 
ON adresse.colonne_1 = enquete.col_1
AND adresse.colonne_2 = enquete.col_2  AND (etc..)

Dernière modification par tumasgiu (Fri 13 July 2018 00:43)

Hors ligne

 

#3 Fri 13 July 2018 10:40

Olivier Pompier
Participant occasionnel
Date d'inscription: 8 Sep 2013
Messages: 49

Re: Jointure sur adresse

Super, je ne savais pas qu'on pouvait ajouter AND à une jointure
Merci bcp

Hors ligne

 

#4 Sat 28 July 2018 12:07

Mathieu Denat
Participant actif
Lieu: Montpellier
Date d'inscription: 5 May 2010
Messages: 110

Re: Jointure sur adresse

Bonjour,

Je profite de ce post pour une petite question d'usage.

Je n'utilise jamais le mot clé INNER (ni OUTER), puisque JOIN exécute par défaut INNER JOIN.
Je travaille avec PostgreSQL 9.6 (je sais il faut que je me mette à jour!)

Est ce une bonne pratique?


Mathieu
C'est en forgeant qu'on devient forgeron

Hors ligne

 

#5 Sat 28 July 2018 13:26

tumasgiu
Membre
Lieu: Ajaccio
Date d'inscription: 5 Jul 2010
Messages: 1129

Re: Jointure sur adresse

Je ne sais pas si le fait de les ommetre soit considéré comme une
bonne ou mauvaise pratique.

Ne pas les écrire peut nuire à la portabilité de vos requêtes,
au cas ou vous migreriez sur un SGBDR imposant ces clauses,
mais je crois bien que dans la norme SQL elle même,  INNER et OUTER sont optionnels.
Il est possible qu'un SGBDR ne respecte intégralement la norme, mais à ma connaissance
à part Access, qui est très contraignant sur les joiintures, du moins jusqu'à la version 2007,
tout les systèmes autorisent l'omission.
Après on peut discuter de l'intérêt d'écrire du code SQL portable.

Ecrire les formes courtes des jointures est univoque, c'est à dire, qu'un JOIN sera toujours INNER
et qu'un LEFT/RIGHT/FULL JOIN sera toujours OUTER, donc pas de risque de se tromper et de faire
une chose à la place d'une autre.

Certaines personnes trouvent les formes longues plus lisibles.
Personnellement je trouve que ça apporte plus du bruit qu'autre chose, et c'est surtout plus long à taper.
Cà n'aide pas non plus les néophytes à la compréhension, puisque les termes INNER et OUTER sont
je trouve très peu parlants, et une recherche de la définition s'impose presque toujours, que le mot clef soit présent ou pas.
CONJONCTION et DISJONCTION auraient été plus appropriés.

Ce qui est par contre peut être une mauvaise pratique, ou tout du moins beaucoup moins lisible,
c'est la forme de jointure  suivante :

Code:

SELECT * FROM t1, t2 WHERE t1.id = t2.id;

Le prédicat de jointure se trouve mêlé à ceux de la clause WHERE, et c'est beaucoup moins clair,
surtout quand plus de deux relations sont concernées et que la clause WHERE comporte plusieurs conditions.
Il me semble que cela peut d'ailleurs avoir un impact sur le plan de la requête sur PostgreSQL.

Je n'utilise jamais cette syntaxe, même pour un CROSS JOIN.

Donc pour répondre à votre question, je vous conseillerais de faire comme vous voulez mais de rester consistant en vous tenant
à une ou l'autre des formes.

Dernière modification par tumasgiu (Sat 28 July 2018 13:33)

Hors ligne

 

#6 Mon 30 July 2018 15:27

Mathieu Denat
Participant actif
Lieu: Montpellier
Date d'inscription: 5 May 2010
Messages: 110

Re: Jointure sur adresse

Merci beaucoup pour cette réponse qui m'éclaire! smile


Mathieu
C'est en forgeant qu'on devient forgeron

Hors ligne

 

Pied de page des forums

Powered by FluxBB