IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

MS SQL Server Discussion :

Requete UPDATE !!!


Sujet :

MS SQL Server

  1. #1
    Nouveau membre du Club
    Inscrit en
    Mars 2004
    Messages
    37
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 37
    Points : 28
    Points
    28
    Par défaut Requete UPDATE !!!
    Bonjour,

    je suis novice en ce qui concerne les requêtes SQL et je n'arrive pas à créer ma requête.

    Supposons que j'ai la table suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    idProduit       Libellé       Date
    100             A             01/01/2004
    100             B             31/01/2004
    31360           C             15/01/2004
    31360           D             05/02/2004
    ....              ....           ....
    Dans cette table, j'ai des produits identiques avec un libellé différents (en fait, c'est l'ancien et le nouveau libellé). J'aimerais remplacer le libellé le plus ancien, ici A, par le plus récent, ici B pour obtenir :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    100             B             01/01/2004
    100             B             31/01/2004
    31360           D             15/01/2004
    31360           D             05/02/2004
    ....              ....           ....
    Je ne sais pas si on peux le faire avec une seule requête UPDATE. En tout cas, je n'y arrive pas.

    Pouvez m'aider svp !!! Au moins me donner une piste

  2. #2
    Rédacteur
    Avatar de WOLO Laurent
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Mars 2003
    Messages
    2 741
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Congo-Brazzaville

    Informations professionnelles :
    Activité : Architecte de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2003
    Messages : 2 741
    Points : 4 414
    Points
    4 414
    Par défaut
    Si vous vous retrouvez dans cette situation c'est que vous avez mal modelisez votre base de données.
    Sachez qu'un identifiant doit être unique dans une table pour éviter de ce retrouver dans une telle situation.

    Nous risquerons de taider à te retouver dans une situation inextricable.
    Nous vous suggerons de reprendre avec la modelisation de votre base de données.

    Pour avoir des renseignements sur La modelisation avec Modélisation MERISE

    Merci et bon apprentissage.

    Découvrez la FAQ de MS SQL Server.
    La chance accorde ses faveurs aux esprits avertis !

  3. #3
    Nouveau membre du Club
    Inscrit en
    Mars 2004
    Messages
    37
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 37
    Points : 28
    Points
    28
    Par défaut
    Si vous vous retrouvez dans cette situation c'est que vous avez mal modelisez votre base de données.
    Sachez qu'un identifiant doit être unique dans une table pour éviter de ce retrouver dans une telle situation.
    Je suis d'accord avec vous !!
    En fait je suis en stage et je dois faire une refonte de la base car elle est mal modélisé (je crois même que vous vous en être apercu).

    Donc à présent, j'ai l'ancienne base et la nouvelle. Le but étant de transférer les données de l'ancienne à la nouvelle. Et pour faciliter ce transfert, je souhaitais d'abord faire une épuration de l'ancienne base, ici en évitant les doublons.

    En tout cas, je vous remercie pour votre réponse. Finalement, j'utilise une autre solution.

    Au revoir

  4. #4
    Rédacteur
    Avatar de WOLO Laurent
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Mars 2003
    Messages
    2 741
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Congo-Brazzaville

    Informations professionnelles :
    Activité : Architecte de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2003
    Messages : 2 741
    Points : 4 414
    Points
    4 414
    Par défaut
    Très bien mon ami, tu as bien négocié la solution.
    Ce bout de code te permet d'en venir à bout.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    UPDATE T_PRODUIT 
    SET PRO_LIBELLE=R.PRO_LIBELLE
    FROM (
     
    	SELECT T1.PRO_ID,PRO_LIBELLE,PRO_DATE
    	FROM T_PRODUIT T1
    	WHERE PRO_DATE=(SELECT MAX(PRO_DATE)
    			FROM T_PRODUIT T2
    			WHERE T1.PRO_ID=T2.PRO_ID
    			)
    	--ORDER BY T1.PRO_ID
    	) R
    WHERE T_PRODUIT.PRO_ID=R.PRO_ID
    Explication:
    Nous pouvons la décomposer en 2 sous emsembles:
    Premièrement
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    SELECT T1.PRO_ID,PRO_LIBELLE,PRO_DATE
    	FROM T_PRODUIT T1
    	WHERE PRO_DATE=(SELECT MAX(PRO_DATE)
    			FROM T_PRODUIT T2
    			WHERE T1.PRO_ID=T2.PRO_ID
    			)
    	ORDER BY T1.PRO_ID
    Ce qui nous donne ceci:
    PRO_ID PRO_LIBELLE PRO_DATE
    ----------- ------------------------------ ------------------------------------------------------
    100 B 2004-01-31 00:00:00.000
    31360 D 2004-02-05 00:00:00.000
    Dès lors la 2 ième requête fait la mise à jour en tenant comte du LIBELLE et de la reference du produit se trouvant dans la première.

    N'oublie pas de marquer resolu ton poste.
    Bienvenue dans le club !!!!

    Découvrez la FAQ de MS SQL Server.
    La chance accorde ses faveurs aux esprits avertis !

  5. #5
    Nouveau membre du Club
    Inscrit en
    Mars 2004
    Messages
    37
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 37
    Points : 28
    Points
    28
    Par défaut
    MErci pour tout !!! Finalement, j'utilise votre solution qui est bien mieux que la mienne.

    Pour info, je récupérais juste les ID des produits pour les mettre dans ma nouvelle table Produit. Puis je faisait une série d'update. LE tout dans une procédure stockée.

    En fait, je savais pas qu'on pouvait faire autant de chose dans un seul UPDATE.

    C'était pas très jolie )

  6. #6
    Rédacteur
    Avatar de WOLO Laurent
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Mars 2003
    Messages
    2 741
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Congo-Brazzaville

    Informations professionnelles :
    Activité : Architecte de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2003
    Messages : 2 741
    Points : 4 414
    Points
    4 414
    Par défaut
    Maintenant tu le sais comme moi.
    Et que diras-tu si je t'envoie faire un tour sur cette page ?

    Bienvenu dans le club des developpeurs francophones.

    Découvrez la FAQ de MS SQL Server.
    La chance accorde ses faveurs aux esprits avertis !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Utilisation d'une requete dans une requete update
    Par hellbilly dans le forum Access
    Réponses: 4
    Dernier message: 09/01/2005, 15h09
  2. [SYBASE] optimisation requete UPDATE
    Par metheorn dans le forum Sybase
    Réponses: 8
    Dernier message: 24/05/2004, 17h01
  3. [version] Requete Update avec différentes versions de mySQL
    Par regbegpower dans le forum Requêtes
    Réponses: 2
    Dernier message: 26/01/2004, 17h19
  4. Requete update
    Par gianfare dans le forum Langage SQL
    Réponses: 7
    Dernier message: 10/10/2003, 09h04
  5. [debutante] erreur requete update
    Par LineLe dans le forum ASP
    Réponses: 5
    Dernier message: 12/09/2003, 13h05

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo