OVH Cloud OVH Cloud

problèmes jointures

46 réponses
Avatar
roseline
bonjour,
j'ai deux fichiers un des ville avec comme clef le numero insee des
villes et un département avec le numero de département comme clef

dans le fichier département il y a un champ contenant le numero insee de
la ville prefecture

comment sortir la liste des villes avec le nom de la ville prefecture en
face?

exemple

le fichier ville contient un article 59307 et l'article département 59
contient 59008

merci

---
Ce courrier électronique ne contient aucun virus ou logiciel malveillant parce que la protection avast! Antivirus est active.
http://www.avast.com

6 réponses

1 2 3 4 5
Avatar
SQLpro
Le 15/12/2014 07:02, helios a écrit :
bonjour,

en SQL c'est pas possible ?





SQL étant un langage complet au sens de Turing, tout problème bien posé
pour lequel il existe une solution avec le niveau de précision voulu est
traduisible dans ce langage.

la solution est :

SELECT v.*, vp.nom_ville AS nom_vile_prefecture
FROM fichier_ville AS v
INNER JOIN fichier_departement AS d
ON d.numero_departement
= SUBSTRING(numero_insee_ville, 1,
CHARACTER_LENGHT(d.numero_departement))
INNER JOIN fichier_ville AS vp
ON d.numero_insee_ville_prefecture = v.numero_insee_ville;

Avec les tables :

CREATE TABLE fichier_ville
(numero_insee_ville VARCHAR(5),
nom_ville VARCHAR(64));

CREATE TABLE fichier_departement
(numero_departement VARCHAR(3),
nom_departement VARCHAR(64),
numero_insee_ville_prefecture CHAR(5));

Conforme à vos désidératas.

A +

--
Frédéric BROUARD, Architecte de Données, 06 11 86 40 66, JE SUIS CHARLIE
# Expert SQL Server "certifié" Microsoft depuis 13 années consécutives #
Enseignant : CNAM PACA / ISEN Toulon / CESI EXIA Aix en P. / EPITA Paris
Audit, conseil, expertise, formation, modélisation, tuning, optimisation
*********************** http://www.sqlspot.com *************************
Le site sur le langage SQL et les SGBDR : http://sqlpro.developpez.com
Le Livre "Microsoft SQL Server 2014" http://www.amazon.fr/dp/2212135920/
Avatar
SQLpro
Le 15/12/2014 14:26, roseline a écrit :


cela donne quoi en mysql ? car Ferrec romain dit que c'est impossible

Peux-tu nous montrer ce que tu as cherché par toi-même et où tu es
bloquée ?




creer la jointure qui partira du fichier ville et ira dans le fichier
departement et reviendra dans le fichier ville


Quel moteur SQL utilises-tu ?




MYSQL




Même avec MySQL qui n'est pas un SGBD Relationnel, mais qui admet
quelques éléments de SQL, la solution déjà donnée fonctionne :

SELECT v.*, vp.nom_ville AS nom_vile_prefecture
FROM fichier_ville AS v
INNER JOIN fichier_departement AS d
ON d.numero_departement
= SUBSTRING(numero_insee_ville, 1,
CHARACTER_LENGHT(d.numero_departement))
INNER JOIN fichier_ville AS vp
ON d.numero_insee_ville_prefecture = v.numero_insee_ville;


Avec les tables :

CREATE TABLE fichier_ville
(numero_insee_ville VARCHAR(5),
nom_ville VARCHAR(64));

CREATE TABLE fichier_departement
(numero_departement VARCHAR(3),
nom_departement VARCHAR(64),
numero_insee_ville_prefecture CHAR(5));

A +


--
Frédéric BROUARD, Architecte de Données, 06 11 86 40 66, JE SUIS CHARLIE
# Expert SQL Server "certifié" Microsoft depuis 13 années consécutives #
Enseignant : CNAM PACA / ISEN Toulon / CESI EXIA Aix en P. / EPITA Paris
Audit, conseil, expertise, formation, modélisation, tuning, optimisation
*********************** http://www.sqlspot.com *************************
Le site sur le langage SQL et les SGBDR : http://sqlpro.developpez.com
Le Livre "Microsoft SQL Server 2014" http://www.amazon.fr/dp/2212135920/
Avatar
SQLpro
Le 16/12/2014 07:37, helios a écrit :
Le 16/12/2014 00:10, XYZ a écrit :
Extrait de l'entête des messages publiés des "deux (un)"
protagoniste(s) :

NNTP-Posting-Host: 88.175.144.136

Vous en tirerez les conclusions...


ETONNAMMENT CELA NE CHANGE RIEN AU FAIT QUE AUCUNE REPONSE CORRECT N'A
ETE FOURNIT EN sql AU PROBLEME ELEMENTAIRE DE sgbd

DONC sql NE SAIT PAS FAIRE DE JOINTURE RÉENTRANTE



Visiblement vous ne savez pas de quoi vous parler. Le problème de la
réentrance est la récursivité; Or la langage SQL dans sa norme SQL:1999
est parfaitement récursif. À me lire :
http://sqlpro.developpez.com/cours/sqlserver/cte-recursives/

Sinon si vous n'êtes pas convaincu de mes écrits, vous pouvez
télécharger la norme SQL à l'ISO :
http://www.iso.org/iso/fr/home/store/catalogue_tc/catalogue_detail.htm?csnumberS682

En revanche, le SGBD non relationnel évoqué dans vos écrits, à savoir
MySQL ne sait pas faire de requêtes récursives... Cela fait partie de
ses nombreuses limitations, sans parler des bugs et autres calculs
fantaisistes :
http://blog.developpez.com/sqlpro/p9136/langage-sql-norme/mysql_un_sgbdr_poudre_aux_yeux

Enfin, en ce qui concerne votre demande, il n'est absolument pas
nécessaire d'invoquer la récursivité. Voici la requête que je vous ais
déjà donné à plusieurs reprises :

SELECT v.*, vp.nom_ville AS nom_vile_prefecture
FROM fichier_ville AS v
INNER JOIN fichier_departement AS d
ON d.numero_departement
= SUBSTRING(numero_insee_ville, 1,
CHARACTER_LENGHT(d.numero_departement))
INNER JOIN fichier_ville AS vp
ON d.numero_insee_ville_prefecture = v.numero_insee_ville;

Avec pour condition, les tables déjà mentionnées :

CREATE TABLE fichier_ville
(numero_insee_ville VARCHAR(5),
nom_ville VARCHAR(64));

CREATE TABLE fichier_departement
(numero_departement VARCHAR(3),
nom_departement VARCHAR(64),
numero_insee_ville_prefecture CHAR(5));

A +





--
Frédéric BROUARD, Architecte de Données, 06 11 86 40 66, JE SUIS CHARLIE
# Expert SQL Server "certifié" Microsoft depuis 13 années consécutives #
Enseignant : CNAM PACA / ISEN Toulon / CESI EXIA Aix en P. / EPITA Paris
Audit, conseil, expertise, formation, modélisation, tuning, optimisation
*********************** http://www.sqlspot.com *************************
Le site sur le langage SQL et les SGBDR : http://sqlpro.developpez.com
Le Livre "Microsoft SQL Server 2014" http://www.amazon.fr/dp/2212135920/
Avatar
helios
Le 03/05/2015 16:29, SQLpro a écrit :
Le 12/12/2014 09:46, roseline a écrit :
bonjour,
j'ai deux fichiers un des ville avec comme clef le numero insee des
villes et un département avec le numero de département comme clef

dans le fichier département il y a un champ contenant le numero insee de
la ville prefecture

comment sortir la liste des villes avec le nom de la ville prefecture en
face?



En SQL normatif :

SELECT v.*, vp.nom_ville AS nom_vile_prefecture
FROM fichier_ville AS v
INNER JOIN fichier_departement AS d
ON d.numero_departement
= SUBSTRING(numero_insee_ville, 1,
CHARACTER_LENGHT(d.numero_departement))
INNER JOIN fichier_ville AS vp
ON d.numero_insee_ville_prefecture = v.numero_insee_ville;

Avec les tables suivantes :

CREATE TABLE fichier_ville
(numero_insee_ville VARCHAR(5),
nom_ville VARCHAR(64));

CREATE TABLE fichier_departement
(numero_departement VARCHAR(3),
nom_departement VARCHAR(64),
numero_insee_ville_prefecture CHAR(5));


exemple

le fichier ville contient un article 59307 et l'article département 59
contient 59008

merci



Apprenez le langage SQL. Mon livre, comme mon site web, peuvent vous ya
aider !


---
Ce courrier électronique ne contient aucun virus ou logiciel malveillant
parce que la protection avast! Antivirus est active.
http://www.avast.com





A +



Désolé quand on est champion de moto on n'a pas besoin d'apprendre a
rouler sur un vélo avec des petites roulettes

autrement quand on ne sait pas modéliser une date dans un SGBD on
s'abstient de vouloir enseigner SQL

et je signale au Sir Brouard qu'il a perdu son procès en 2009
Avatar
helios
Le 03/05/2015 16:40, SQLpro a écrit :
Le 16/12/2014 07:37, helios a écrit :
Le 16/12/2014 00:10, XYZ a écrit :
Extrait de l'entête des messages publiés des "deux (un)"
protagoniste(s) :

NNTP-Posting-Host: 88.175.144.136

Vous en tirerez les conclusions...


ETONNAMMENT CELA NE CHANGE RIEN AU FAIT QUE AUCUNE REPONSE CORRECT N'A
ETE FOURNIT EN sql AU PROBLEME ELEMENTAIRE DE sgbd

DONC sql NE SAIT PAS FAIRE DE JOINTURE RÉENTRANTE



Visiblement vous ne savez pas de quoi vous parler. Le problème de la
réentrance est la récursivité; Or la langage SQL dans sa norme SQL:1999
est parfaitement récursif. À me lire :
http://sqlpro.developpez.com/cours/sqlserver/cte-recursives/

Sinon si vous n'êtes pas convaincu de mes écrits, vous pouvez
télécharger la norme SQL à l'ISO :
http://www.iso.org/iso/fr/home/store/catalogue_tc/catalogue_detail.htm?csnumberS682


En revanche, le SGBD non relationnel évoqué dans vos écrits, à savoir
MySQL ne sait pas faire de requêtes récursives... Cela fait partie de
ses nombreuses limitations, sans parler des bugs et autres calculs
fantaisistes :
http://blog.developpez.com/sqlpro/p9136/langage-sql-norme/mysql_un_sgbdr_poudre_aux_yeux


Enfin, en ce qui concerne votre demande, il n'est absolument pas
nécessaire d'invoquer la récursivité. Voici la requête que je vous ais
déjà donné à plusieurs reprises :

SELECT v.*, vp.nom_ville AS nom_vile_prefecture
FROM fichier_ville AS v
INNER JOIN fichier_departement AS d
ON d.numero_departement
= SUBSTRING(numero_insee_ville, 1,
CHARACTER_LENGHT(d.numero_departement))
INNER JOIN fichier_ville AS vp
ON d.numero_insee_ville_prefecture = v.numero_insee_ville;

Avec pour condition, les tables déjà mentionnées :

CREATE TABLE fichier_ville
(numero_insee_ville VARCHAR(5),
nom_ville VARCHAR(64));

CREATE TABLE fichier_departement
(numero_departement VARCHAR(3),
nom_departement VARCHAR(64),
numero_insee_ville_prefecture CHAR(5));

A +







Désolé quand on est champion de moto on n'a pas besoin d'apprendre a
rouler sur un vélo avec des petites roulettes

autrement quand on ne sait pas modéliser une date dans un SGBD on
s'abstient de vouloir enseigner SQL

et je signale au Sir Brouard qu'il a perdu son procès en 2009
Avatar
helios
Le 03/05/2015 16:29, SQLpro a écrit :
Le 12/12/2014 09:46, roseline a écrit :
bonjour,
j'ai deux fichiers un des ville avec comme clef le numero insee des
villes et un département avec le numero de département comme clef

dans le fichier département il y a un champ contenant le numero insee de
la ville prefecture

comment sortir la liste des villes avec le nom de la ville prefecture en
face?



En SQL normatif :

SELECT v.*, vp.nom_ville AS nom_vile_prefecture
FROM fichier_ville AS v
INNER JOIN fichier_departement AS d
ON d.numero_departement
= SUBSTRING(numero_insee_ville, 1,
CHARACTER_LENGHT(d.numero_departement))
INNER JOIN fichier_ville AS vp
ON d.numero_insee_ville_prefecture = v.numero_insee_ville;

Avec les tables suivantes :

CREATE TABLE fichier_ville
(numero_insee_ville VARCHAR(5),
nom_ville VARCHAR(64));

CREATE TABLE fichier_departement
(numero_departement VARCHAR(3),
nom_departement VARCHAR(64),
numero_insee_ville_prefecture CHAR(5));


exemple

le fichier ville contient un article 59307 et l'article département 59
contient 59008

merci



Apprenez le langage SQL. Mon livre, comme mon site web, peuvent vous ya
aider !


---
Ce courrier électronique ne contient aucun virus ou logiciel malveillant
parce que la protection avast! Antivirus est active.
http://www.avast.com





A +



Désolé quand on est champion de moto on n'a pas besoin d'apprendre a
rouler sur un vélo avec des petites roulettes

autrement quand on ne sait pas modéliser une date dans un SGBD on
s'abstient de vouloir enseigner SQL

et je signale au Sir Brouard qu'il a perdu son procès en 2009
1 2 3 4 5