|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||
|
Invité régulier
![]() Marcel Cyrille LAMENU Inscription : avril 2010 Messages : 30 ![]() |
Bonjour,
Je veux mettre à jour les champs de mon entrepot de données en utilisant la requête suivante: Code :
SVP je voudrais savoir si ça ne s’écrit pas en SQL . Pouvez vous me donner une solution? Merci de votre compréhension. |
||
|
|
00
|
|
|
#2 | ||||
![]() ![]() |
Quel est ton SGBD ?
Tu peux faire soit ceci : Code :
Code :
Je viens d'examiner ta requête... Dans la sous-requête qui figure dans le NOT EXISTS, inutile de préciser les colonnes dans le SELECT, c'est le seul cas ou SELECT * est justifié ! En plus, comme tu n'as pas mis de condition dans cette sous requête, le NOT EXISTS sera toujours faux puisqu'il existe des lignes dans la table dim_address. Depuis 1992, les jointures s'écrivent avec l'opérateur JOIN ; il serait temps de s'y mettre !
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique. Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework... « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau) À la maison comme au bureau, j'utilise Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française ! Linuxiens, comptez-vous ! |
||||
|
00
|
|
|
#3 |
|
Invité régulier
![]() Marcel Cyrille LAMENU Inscription : avril 2010 Messages : 30 ![]() |
J'utilise le SGBD MySQL.
Je vais essayé ta proposition pour voir si ça marche. Merci de ta piste |
|
|
00
|
|
|
#4 | ||
|
Invité régulier
![]() Marcel Cyrille LAMENU Inscription : avril 2010 Messages : 30 ![]() |
STP CinePhil, peux tu un peu mieux m'expliquer comment fonctionne le inner join.
En effet, dans mon cas, à ce que j'ai compris, voici la requête que j'écris et ça ne marche toujours pas. Code :
|
||
|
|
00
|
|
|
#5 | ||||
![]() ![]() |
Tu peux donner la structure des tables dim_address et m_customer_doc_address ?
S'il y a vraiment les mêmes colonnes dans les deux tables, ta BDD est mal modélisée. Dans ta dernière requête, le WHERE est inutile ; d'ailleurs, l'alias ea n'existe pas dans la requête. Dans la partie SET, il faut mettre les alias de tables sinon le SGBD ne va pas forcément savoir si tu veux remplacer la valeur existante par elle-même ou si tu veux affecter la valeur d'une table à l'autre. Plutôt que getDate(), il vaut mieux utiliser CURRENT_DATE qui est du SQL standard. Bref, j'ai l'impression que tu as besoin de cours SQL. Le principe de la jointure est qu'on joint des tables entre elles sur une condition de jointure qui porte sur une ou plusieurs informations communes, en principe la clé primaire d'une table qui se retrouve clé étrangère dans l'autre table. Exemple : Règle de gestion : Une entreprise a de une à plusieurs adresses et une adresse n'appartient qu'à une seule entreprise. MCD (méthode Merise) : entreprise -1,n----avoir----1,1- adresse -1,1----situer----0,n- ville Tables : entreprise (ent_id, ent_nom...) ville (vil_id, vil_nom...) adresse (adr_id, adr_id_entreprise, adr_id_ville, adr_rue, adr_code_postal) On aurait pu même faire mieux que ça mais c'est juste un exemple. Quelles sont les adresses de l'entreprise X ? Code :
Code :
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique. Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework... « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau) À la maison comme au bureau, j'utilise Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française ! Linuxiens, comptez-vous ! |
||||
|
00
|
|
|
#6 | ||
|
Invité régulier
![]() Marcel Cyrille LAMENU Inscription : avril 2010 Messages : 30 ![]() |
Voici la structure de la table dim_address:
Code :
- `document_id` - `document_model` - `document_label` - `firstname` - `lastname` - `email` - `company` - `addressline1` - `addressline2` - `addressline3` - `zipcode` - `city` - `province` - `countryid` - `phone` - `mobilephone` - `document_creationdate` - `document_modificationdate` Merci de ta compréhension. |
||
|
|
00
|
|
|
#7 | |
![]() ![]() |
Depuis le début de la discussion, on parle d'UPDATE (mise à jour)...
Citation:
VARCHAR(255) pour la plupart des colonnes qui sont affublées de ce type, c'est largement dimensionné ! Puisqu'il y a un document_id qui semble donc être une clé étrangère, il ne devrait pas y avoir document_label et document_model qui semblent être des propriétés du document ; on peut les retrouver par jointure avec la table des documents. N'as-tu pas une table des personnes et des compagnies ? Il faudrait plutôt ici une clé étrangère comme je l'ai fait dans mon exemple du message précédent. La city devrait être externalisée dans une table de référence des villes. Il y a aussi redondance de données puisque figurent à la fois city, countryid et province. Tout devrait se déduire par jointure à partir de l'identifiant de la city.
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique. Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework... « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau) À la maison comme au bureau, j'utilise Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française ! Linuxiens, comptez-vous ! |
|
|
00
|
|
|
#8 |
|
Invité régulier
![]() Marcel Cyrille LAMENU Inscription : avril 2010 Messages : 30 ![]() |
J'utilise la structure d'une base de données en place pour construire mon entrepôt de données (datawarehouse). J'ai déjà extrait les informations que j'ai mis dans dim_address.
Et maintenant, je veux mettre à jour les champs qui ont changé dans ma table de production (m_customer_doc_address). C'est donc une mise à jour de l’entrepôt de données (dim_address) que je suis en train de faire. Je m'explique: Supposons que la ville du client change. Si on lance la mise à jour, elle doit pouvoir comparer les champs correspondants (entre la base de production et l'entrepôt) et, le cas échéant, changer l'ancienne valeur par la nouvelle valeur (le changement se fait donc dans l’entrepôt vu que il a été modifié dans la base de production par l'utilisateur. Voilà un peu le problème que je veux résoudre. Merci de votre compréhension. |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com