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
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses Page 1 / 5
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
FERREC Romain
Le #26328714
Le 12-12-2014, roseline
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




Ok donc sous forme de tables (relations) :
* ville (_numinsee) departement(_numdep, #numinsee) où #numsee et la
* clé étrangère vers
ville.


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



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).


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



Des virus non, mais du spam oui.
Eric Demeester
Le #26328732
Bonjour,

roseline (Fri, 12 Dec 2014 09:46:19 +0100 - fr.comp.applications.sgbd) :

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



Ç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

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



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é.

exemple

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



Je n'ai rien compris à l'exemple :)
roseline
Le #26328742
Le 12/12/2014 18:09, Eric Demeester a écrit :> Bonjour,

roseline (Fri, 12 Dec 2014 09:46:19 +0100 - fr.comp.applications.sgbd) :

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



Ç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




oui


comment sortir la liste des villes avec le nom de la ville préfecture en
face?



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.




la question est obtenir une liste ville avec en face le nom de la
préfecture de leur département




exemple

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



Je n'ai rien compris à l'exemple :)





Villes :
vi_Code_insee = 59307
vi_Nom = LIGNY

- Departements :
dp_Numero = 59
dp_Nom = NORD
dp_Code_insee_préfecture = 59008




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
helios
Le #26328750
Le 12/12/2014 19:02, roseline a écrit :
Le 12/12/2014 18:09, Eric Demeester a écrit :> Bonjour,
>
> roseline (Fri, 12 Dec 2014 09:46:19 +0100 - fr.comp.applications.sgbd) :
>
>> 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
>
> Ç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
>

oui


>> comment sortir la liste des villes avec le nom de la ville
préfecture en
>> face?
>
> 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.
>

la question est obtenir une liste ville avec en face le nom de la
préfecture de leur département



>
>> exemple
>>
>> le fichier ville contient un article 59307 et l'article département 59
>> contient 59008
>
> Je n'ai rien compris à l'exemple :)
>


Villes :
> vi_Code_insee = 59307
> vi_Nom = LIGNY
>
> - Departements :
> dp_Numero = 59
> dp_Nom = NORD
> dp_Code_insee_préfecture = 59008


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
helios
Le #26328749
Le 12/12/2014 19:02, roseline a écrit :
Le 12/12/2014 18:09, Eric Demeester a écrit :> Bonjour,
>
> roseline (Fri, 12 Dec 2014 09:46:19 +0100 - fr.comp.applications.sgbd) :
>
>> 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
>
> Ç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
>

oui


>> comment sortir la liste des villes avec le nom de la ville
préfecture en
>> face?
>
> 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.
>

la question est obtenir une liste ville avec en face le nom de la
préfecture de leur département



>
>> exemple
>>
>> le fichier ville contient un article 59307 et l'article département 59
>> contient 59008
>
> Je n'ai rien compris à l'exemple :)
>


Villes :
> vi_Code_insee = 59307
> vi_Nom = LIGNY
>
> - Departements :
> dp_Numero = 59
> dp_Nom = NORD
> dp_Code_insee_préfecture = 59008


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
Eric Demeester
Le #26328838
Bonjour,

roseline (Fri, 12 Dec 2014 19:02:48 +0100 - fr.comp.applications.sgbd) :

la question est obtenir une liste ville avec en face le nom de la
préfecture de leur département



D'accord.

Villes :
> vi_Code_insee = 59307
> vi_Nom = LIGNY
>
> - Departements :
> dp_Numero = 59
> dp_Nom = NORD
> dp_Code_insee_préfecture = 59008

donc pour QUELQUES VILLES DE NORD-PICARDIE CELA DONNE
ST QUENTIN LAON
VERVIN LAON
BOHAIN LAON
LIGNY LILLE
CAMBRAI LILLE
MAUBEUGE LILLE


[...]

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 :)
roseline
Le #26328854
Le 13/12/2014 14:41, Eric Demeester a écrit :
Bonjour,

roseline (Fri, 12 Dec 2014 19:02:48 +0100 - fr.comp.applications.sgbd) :

la question est obtenir une liste ville avec en face le nom de la
préfecture de leur département



D'accord.

Villes :
> vi_Code_insee = 59307
> vi_Nom = LIGNY
>
> - Departements :
> dp_Numero = 59
> dp_Nom = NORD
> dp_Code_insee_préfecture = 59008



donc pour QUELQUES VILLES DE NORD-PICARDIE CELA DONNE
ST QUENTIN LAON
VERVIN LAON
BOHAIN LAON
LIGNY LILLE
CAMBRAI LILLE
MAUBEUGE LILLE


[...]

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.




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



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





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


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 :)




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
Eric Demeester
Le #26328892
roseline (Sat, 13 Dec 2014 16:17:05 +0100 - fr.comp.applications.sgbd) :

Le 13/12/2014 14:41, Eric Demeester a écrit :
> 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.

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



Je disais pile-poil la même chose, hein.

> // 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
>

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



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.
roseline
Le #26328951
Le 13/12/2014 19:22, Eric Demeester a écrit :
roseline (Sat, 13 Dec 2014 16:17:05 +0100 - fr.comp.applications.sgbd) :

Le 13/12/2014 14:41, Eric Demeester a écrit :
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.



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



Je disais pile-poil la même chose, hein.

// 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






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



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
helios
Le #26329135
Le 14/12/2014 09:37, roseline a écrit :
Le 13/12/2014 19:22, Eric Demeester a écrit :
roseline (Sat, 13 Dec 2014 16:17:05 +0100 - fr.comp.applications.sgbd) :

Le 13/12/2014 14:41, Eric Demeester a écrit :
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.



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



Je disais pile-poil la même chose, hein.

// 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






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



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 ?
Publicité
Poster une réponse
Anonyme