|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Candidat au titre de Membre du Club
![]() Arnaud Étudiant Inscription : mars 2011 Messages : 60 ![]() |
Bonjour à tous,
Je suis actuellement dans l'incapacité de concevoir la manière dont je dois procéder afin de lier mes données entre deux tables par exemple... Je m'explique, j'ai dans mon cas un table ENTREPRISES qui contient les champs :
J'ai une deuxième table VENTE qui contient les champs :
Donc j'ai bien mis mes PK et FK entre les deux, tout va bien jusque là sauf que... A la base, j'ai un fichier txt que j'ai importé dans sa totalité dans une table temporaire. Ce fichier est constitué de la manière suivante : Siren, Nom, adresse, type_vente, date, montant 000000001, entreprise 1 , adresse1, type1, 10/03/2011, 100 000000001, entreprise 1 , adresse1, type1, 11/03/2011, 200 000000001, entreprise 1 , adresse1, type2, 13/06/2011, 50 000000002, entreprise 2 , adresse2, type2, 20/02/2011, 158 000000002, entreprise 2 , adresse2, type1, 20/02/2011, 300 ... La suite c'est la même avec des centaines de milliers de lignes... Donc après avoir dé doublonné ma table temporaire pour insérer qu'une seule fois dans ENTREPRISE, l'entreprise1 par exemple. Je souhaiterai maintenant insérer l'autre partie des mes informations tout en faisant les correspondance entre les deux ! Dans la table ENTREPRISES : id_entreprise, siren, nom, adresse 01, 000000001, entreprise 1 , adresse1 02, 000000002, entreprise 2 , adresse2 ... Dans la table VENTES : id_vente, id_entreprise, type_vente, date, montant 01, 01, type1, 10/03/2011, 100 02, 01, type1, 11/03/2011, 200 03, 01, type2, 13/06/2011, 50 04, 02, type2, 20/02/2011, 158 05, 02, type1, 20/02/2011, 300 ... Je crois que mon explication est assez clair, comment je dois gérer la correspondance automatique entre mes deux tables ? Je sais pas si c'est la bonne question à ma demande... Merci d'avance de m'éclairer |
|
|
00
|
|
|
#2 | ||||
![]() ![]() ![]() Nicolas SouquetAdministrateur de base de données Inscription : janvier 2005 Messages : 4 669 ![]() |
Bonjour,
IL vous faut dans un premier temps ajouter à la table ENTREPRISES les entreprises que vous n'auriez pas déjà enregistrées en base de données. Je suppose ici que l'id_entreprise est une clé entière avec la propriété d'auto-incrémentation : Code :
Code :
__________________
En bases de données relationnelles SQL, il n'y a ni tableaux, ni enregistrements, ni champs: il y a des tables, des lignes et des colonnes. Blog | Profil| Consulter ou télécharger les fichiers d'aide de SQL Server, des versions 2000 à 2012 |
||||
|
00
|
|
|
#3 |
|
Candidat au titre de Membre du Club
![]() Arnaud Étudiant Inscription : mars 2011 Messages : 60 ![]() |
Ouahhh c'est formidable ce que vous venez de me mettre là !
Y a juste un petit hic ! En faite dans ma table ENTREPRISE le Siren est à 000000000 pour les entreprises étrangère càd que si je reprend mon exemple : Siren, Nom, adresse, type_vente, date, montant 000000000, entreprise 1 , adresse1, type1, 10/03/2011, 100 000000000, entreprise 1 , adresse1, type1, 11/03/2011, 200 000000000, entreprise 1 , adresse1, type2, 13/06/2011, 50 000000000, entreprise 2 , adresse2, type2, 20/02/2011, 158 000000000, entreprise 2 , adresse2, type1, 20/02/2011, 300 ... Qu'est ce que je pourrai faire afin de remédier à se problème ? Car lors de l’exécution des requêtes ci dessus, forcement il fait de mauvaises insertions puisqu'il se base sur le Siren... étant donné qu'ils sont tous à 0 pour qq entreprises mes jointures ne sont pas bonnes. Le dé doublonnement en revanche lors de l’exécution de la première requête marche à la perfection puisque j’obtiens bien un seul et unique Siren à 00000000 pour une entreprise. |
|
|
00
|
|
|
#4 |
![]() ![]() ![]() David BARBARINExpert SQL Server Inscription : août 2005 Messages : 3 723 ![]() |
Dans ce cas la colonne no siren ne peut pas être candidate en tant que clé primaire. Il faudra ajouter une colonne auto incrémentée par exemple pour rendre vos tuples uniques.
++ |
|
00
|
|
|
#5 | |||||||
|
Candidat au titre de Membre du Club
![]() Arnaud Étudiant Inscription : mars 2011 Messages : 60 ![]() |
Citation:
Donc ca donnerai, pour la deuxième requête : Code :
Je rajoute une question, car j'avis déjà pas mal chercher et je m'aperçois que ca ne fonctionne toujours pas... Je souhaiterai remettre à 1 mon compteur lorsque je vide ma table. J'ai bien compris la différence entre le DELETE et le TRUNCATE (mm si cette derniere ne marche pas car mes tables sont liées à d'autres...) Pour ce qui est du reseed à 1 ca ne fonctionne pas... Code :
EDIT : Je laisse mon erreur au cas ou... Il ne pas mettre tout le chemin d'accès à la base mais uniquement la table ! Code :
|
|||||||
|
|
00
|
|
|
#6 | |
![]() ![]() ![]() David BARBARINExpert SQL Server Inscription : août 2005 Messages : 3 723 ![]() |
Citation:
Votre table vente (que vous voulez vider ??? dans votre exemple) est-elle référencée ailleurs ? ++ |
|
|
00
|
|
|
#7 |
|
Candidat au titre de Membre du Club
![]() Arnaud Étudiant Inscription : mars 2011 Messages : 60 ![]() |
Code :
Tout dépend .. vous pouvez tout à faite effectuer un TRUNCATE sur une TABLE qui est "liée" mais qui n'est pas référencée par une autre table. Donc tout va bien en fait ! Désolé... Par contre pour l'histoire de mes SIREN à 000000000. J'ai modifié se que j'avais dit un peu plus haut puisque j'ai comparé la table TEMP avec ENTREPRISE par le biais du "nom"... J'aime pas trop passé par là car c'est rempli de caractère et mm si c'est "fiable" pour le moment, dans 2 mois au moindre changement de nom ça va tout casser ! Le Siren lui reste donc la valeur sur sauf pour mes Siren à 00000000... Donc l'option de prendre une clés primaire est la bonne sauf que j'ai actuellement : [TEMP] --> id_temp = 5 --> nom = entreprise1 --> id_temp = 6 --> nom = entreprise1 --> id_temp = 7 --> nom = entreprise1 [ENTREPRISE] --> Id_entreprise = 64 --> nom = entreprise1 [VENTES] --> id_temp = 5 --> nom = entreprise1 --> id_temp = 6 --> nom = entreprise1 --> id_temp = 7 --> nom = entreprise1 En gros ca me refait une sorte de table ENTREPRISE dans ma table VENTES... Limite je pourrais faire une condition sur le JOIN en comparant les Sirens et les Id ?? EDIT : bon j'ai rien dit ca me donne que 24 lignes de crées au lieu des 130 000... lol Je vois pas comment vous voulez que je fasse |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com