problèmes jointures
Le
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
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
Ok donc sous forme de tables (relations) :
* ville (_numinsee) departement(_numdep, #numinsee) où #numsee et la
* clé étrangère vers
ville.
Hmm, vous voulez dire : pour chaques villes appartenant à un
departement, quelle est la ville prefecure associée ? Tel que vous
citez les tables ce n'est pas possible car on se sait pas à quel
département appartient une ville (hormi les prefecures).
Des virus non, mais du spam oui.
roseline (Fri, 12 Dec 2014 09:46:19 +0100 - fr.comp.applications.sgbd) :
Ça donne donc deux fichiers, ou tables suivant la terminologie liée au
moteur de bases de données utilisés :
- Villes :
vi_Code_insee
vi_Nom
- Departements :
dp_Numero
dp_Nom
dp_Code_insee_préfecture
On ne peut pas. Si on suppose que la question est « obtenir la liste des
départements avec le nom de la ville préfecture en face », ça devient
réalisable.
On lit le fichier des départements dans un ordre à déterminer, par
numéro croissant des département par exemple. Pour chaque département,
on recherche le code Insee dans le fichier des villes, en prenant pour
clé de recherche le code Insee de la préfecture figurant dans le fichier
des départements.
L'algorithme ressemblera à ça (on parcourt le fichier Departements) :
POUR dp_Numero = premier à dernier par ordre croissant des numéros
RECHERCHER dans Villes la ville ou vi_Code_insee =
dp_Code_insee_préfecture
SI TROUVE ALORS
AFFICHER dp_Numero, vi_Code_insee, vi_Nom
SINON
AFFICHER 'erreur - code non trouvé dans Villes'
FIN
dp_Numero SUIVANT
à adapter en fonction de la syntaxe du langage d'interrogation du
logiciel de gestion de base de données utilisé.
Je n'ai rien compris à l'exemple :)
oui
la question est obtenir une liste ville avec en face le nom de la
préfecture de leur département
Villes :
donc pour QUELQUES VILLES DE NORD-PICARDIE CELA DONNE
ST QUENTIN LAON
VERVIN LAON
BOHAIN LAON
LIGNY LILLE
CAMBRAI LILLE
MAUBEUGE LILLE
LENS ARRAS
BETHUNE ARRAS
CREIL BEAUVAIS
COMPIEGNE BEAUVAIS
SENLIS BEAUVAIS
DURY AMIENS
PERRONNES AMIENS
ROYE AMIENS
---
Ce courrier électronique ne contient aucun virus ou logiciel malveillant parce que la protection avast! Antivirus est active.
http://www.avast.com
bonjour
la solution est un lien ré entrant entre
vi_Code_INSEE et dp_Code_INSEE_préfecture
ce qui se fait très bien en utilisant deux fois la fonction TRANS et un
champs Implicite de dictionnaire sur le fichier Villes dans un SGBDMV
schématiquement cela donne pour la préfecture de la ville 59307
vi_Code_INSEE ---59---> dp_Numéro
|
|
vi_Code_INSEE <-59008-- dp_Code_INSEE_préfecture
|
|
vi_Nom
le lien fait un lien entre les 2 premier chiffre du code INSEE de la
ville pour avoir le département , lie le code INSEE de la préfecture et
lie le nom de la ville ayant ce code insee
bonjour
la solution est un lien ré entrant entre
vi_Code_INSEE et dp_Code_INSEE_préfecture
ce qui se fait très bien en utilisant deux fois la fonction TRANS et un
champs Implicite de dictionnaire sur le fichier Villes dans un SGBDMV
schématiquement cela donne pour la préfecture de la ville 59307
vi_Code_INSEE ---59---> dp_Numéro
|
|
vi_Code_INSEE <-59008-- dp_Code_INSEE_préfecture
|
|
vi_Nom
le lien fait un lien entre les 2 premier chiffre du code INSEE de la
ville pour avoir le département , lie le code INSEE de la préfecture et
lie le nom de la ville ayant ce code insee
roseline (Fri, 12 Dec 2014 19:02:48 +0100 - fr.comp.applications.sgbd) :
D'accord.
[...]
Dans ce cas, il faut un indicateur supplémentaire permettant de
connaitre à quel département appartient la ville, on admettra qu'il n'y
a qu'une préfecture par département.
Cet indicateur sera le numéro du département (dp_Numero). Les opérations
de ce type étant généralement plus simples à réaliser sur les chaînes
que sur les numériques, on va compléter la définition de nos champs :
Villes :
vi_Code_insee CHAÎNE (5 caractères)
vi_Nom CHAÎNE (150 caractères)
Departements :
dp_Numero CHAÎNE (2 caractères)
dp_Nom CHAÎNE (150 caractères)
dp_Code_insee_prefecture CHAÎNE (5 caractères)
Il y a plusieurs façons de procéder. L'une d'entre elles est de lire le
fichier des départements, pour chaque département de rechercher la
préfecture qu'on stockera dans une variable, puis de lire le fichier des
villes en ordre croissant des noms de villes, en sélectionnant celles
dont le code Insee débute par le numéro du département concerné.
Pour faire plus joli, on peut ajouter le numéro du département à
l'affichage.
// Variable de stockage du nom de la préfecture
NOM_PREFECTURE est une chaîne de 150 caractères
POUR dp_Numero = premier à dernier par ordre croissant des numéros
RECHERCHER dans Villes la ville ou vi_Code_insee =
dp_Code_insee_prefecture
SI TROUVE ALORS
NOM_PREFECTURE = vi_Nom
POUR vi_Nom = premier à dernier par ordre alphabétique croissant
SI GAUCHE(vi_Code_insee, 2) = dp_Numero ALORS
AFFICHER dp_Numero, vi_Nom, NOM_PREFECTURE
FIN
vi_Nom SUIVANT
SINON
AFFICHER 'erreur - code préfecture non trouvé dans Villes'
FIN
dp_Numero SUIVANT
Notez que cet exemple ne permet pas de traiter correctement les 5
départements d'Outre-mer, puisque ces derniers sont codés sur 3
caractères :
http://fr.wikipedia.org/wiki/D%C3%A9partement_et_r%C3%A9gion_d%27outre-mer
Si vous devez les traiter aussi, c'est probablement possible en
modifiant l'algorithme, car ces trois caractères se retrouvent dans la
partie gauche du code de la préfecture. La sélection des villes devra
dans ce cas se faire sur 3+2 au lieu de 2+3.
Vous pourrez essayer une fois que le premier traitement fonctionnera :)
non le numero du département d'une ville est les deux premiers chiffres
de son numero INSEE et il y a toujours qu'une préfecture par département
mais cela ne permet pas de classer par ordre alphabétique les villes par
exemple a moins de lire 33000fois le fichier des départements
il suffit que si les 2 premier chiffres sont 97 en lire un troisiéme
ce qui se résume a :
gauche(vi_insee,2):gauche(vi_insee,2)>"96"*milieu(vi_insee,1,2)
---
Ce courrier électronique ne contient aucun virus ou logiciel malveillant parce que la protection avast! Antivirus est active.
http://www.avast.com
Je disais pile-poil la même chose, hein.
Dans mon exemple, on parcourt le fichier des départements une seule fois
par ordre croissant des départements, puis pour chaque département, on
parcourt le fichier des villes en ordre alphabétique, en filtrant sur le
numéro de département.
On obtient une liste classée par ordre croissant des départements, et
pour chaque département, par ordre alphabétique des villes.
Si vous voulez obtenir une liste triée en ordre alphabétique croissant
des villes, c'est le fichier des villes qui ne sera lu qu'une fois et on
cherchera la préfecture correspondant au code Insee de chaque ville dans
le fichier des départements.
Le problème, c'est qu'on va à la fois parcourir le fichier des villes
par ordre alphabétique croissant, et, pour chaque ville, lire le fichier
des départements selon les 2 caractères de gauche du code Insee pour
récupérer le code Insee de la préfecture, par recherche du nom de la
préfecture correspondante dans le fichier des villes.
Du coup on perd le pointeur de parcours sur le fichier des villes. Euh,
je ne sais pas si c'est très clair :)
Là, on a plusieurs solutions :
- mémoriser le pointeur de parcours du fichier Villes pour reprendre
le parcours au bon endroit (un peu acrobatique) ;
- ajouter le nom de la préfecture dans le fichier des départements
(on n'aime pas stocker d'informations redondantes) ;
- créer une table de liaison Prefectures, éventuellement en mémoire,
qui servira de jointure.
- Prefectures :
pr_Code_insee CHAÎNE (5 caractères)
pr_Nom CHAÎNE (150 caractères)
On commence par construire la table intermédiaire :
POUR dp_Numero = premier à dernier par ordre croissant des numéros
RECHERCHER dans Villes la ville ou vi_Code_insee dp_Code_insee_prefecture
SI TROUVE ALORS
ECRIRE dans Prefectures vi_Code_Insee, vi_Nom
SINON
AFFICHER 'erreur - code préfecture non trouvé dans Villes'
FIN
dp_Numero suivant
// Variable intermédiaire pour prendre en compte les départements
// d'Outre-mer :
LONGEUR ENTIER
POUR vi_Nom = premier à dernier par ordre alphabétique croissant
SI Gauche(vi_Code_insee,2) < "96" ALORS
LONGUEUR = 2
SINON
LONGUEUR = 3
FIN
RECHERCHER dans Prefectures celle dont Gauche(vi_Code_insee, LONGUEUR)
= Gauche(pr_Code_insee, LONGUEUR)
AFFICHER vi_Nom, pr_Nom
vi_Nom suivant.
C'est une façon de procéder parmi d'autres mais ça doit fonctionner, et
ça a l'avantage de la rapidité, puisque le parcours du fichier des 36000
communes ne se fait qu'une fois.
cela donne quoi en SQL ?
---
Ce courrier électronique ne contient aucun virus ou logiciel malveillant parce que la protection avast! Antivirus est active.
http://www.avast.com
bonjour,
en SQL c'est pas possible ?