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

Développement SQL Server Discussion :

Update de plusieurs champs avec auto-jointure [2005]


Sujet :

Développement SQL Server

  1. #1
    Membre actif
    Profil pro
    Inscrit en
    Février 2007
    Messages
    260
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 260
    Points : 281
    Points
    281
    Par défaut Update de plusieurs champs avec auto-jointure
    Bonjour,

    Je dois mettre à jour plusieurs colonnes d'une table avec des valeurs prises dans la même table.

    Table mise à jour : ma_table
    Clé : id, age
    Champs mis à jours : val1_bis et val2_bis
    Valeurs à assigner : val1 et val2, pris pour le même id mais l'age précédent

    En fonction de ce que j'aurai fait sous Oracle et de ce que j'ai trouvé comme doc et exemples j'ai testé divers codes du genre : (celui-ci ne marche pas mais il illustre ce que je cherche à faire)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    -- Code faux
    Update ma_table t1 Set
      t1.val1_bis = (select t2.val1 from ma_table t2 where t2.id = t1.id and t2.age = t1.age-1),
      t1.val2_bis = (select t2.val2 from ma_table t2 where t2.id = t1.id and t2.age = t1.age-1)
    Au final j'en viens à me demander si l'auto-jointure est possible dans les mises à jour.
    Est-ce possible et si oui comment ?

    Pozzo.Siouplé

  2. #2
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Points : 13 092
    Points
    13 092
    Par défaut
    Bonjour,

    Oui, vous pouvez faire quelque chose comme ceci (je n'ai pas précisément compris votre contexte, c'est donc pour l'exemple, à adapter à votre cas ) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    UPDATE t1
        SET val1_bis = t2.val1 
            , val2_bis = t2.val2
    FROM ma_table t1 
    INNER JOIN ma_table t2
        ON t2.id = t1.id AND t2.age = t1.age-1

  3. #3
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 763
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 763
    Points : 52 554
    Points
    52 554
    Billets dans le blog
    5
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    UPDATE t1 
    SET    val1_bis = t2.val1,
           val2_bis = t2.val2
    FROM   ma_table AS t1
           INNER JOIN ma_table AS t2
    	         ON t2.id = t1.id AND t2.age = t1.age-1;
    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  4. #4
    Membre actif
    Profil pro
    Inscrit en
    Février 2007
    Messages
    260
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 260
    Points : 281
    Points
    281
    Par défaut Impec
    Bonjour,

    Ok merci c'est bien ce que je veux faire et ça marche bien.
    Du coup ça me fait un curseur et une floppée de variables en moins.

    Merci.

    Pozzo

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

Discussions similaires

  1. [AC-2003] update sur plusieurs champs avec 2 tables
    Par C02226 dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 24/10/2012, 22h16
  2. Update avec auto jointure
    Par samsso2006 dans le forum Langage SQL
    Réponses: 1
    Dernier message: 24/03/2010, 19h01
  3. update de plusieurs champs avec sous requete
    Par MarcS dans le forum SQL Procédural
    Réponses: 3
    Dernier message: 03/05/2008, 14h45
  4. Requête avec auto jointure récalcitrante
    Par vmolines dans le forum Langage SQL
    Réponses: 15
    Dernier message: 30/03/2006, 21h31
  5. Update de plusieurs champs
    Par nicoaix dans le forum Access
    Réponses: 6
    Dernier message: 24/02/2006, 11h26

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