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

Langage SQL Discussion :

[SQL Server] Requete update sur 2 champs


Sujet :

Langage SQL

  1. #1
    Futur Membre du Club
    Inscrit en
    Février 2006
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 5
    Points : 6
    Points
    6
    Par défaut [SQL Server] Requete update sur 2 champs
    Boujour à tous, je travaille sous SQL Server (je ne sais pas si ça a une incidence?) et je voudrais savoir si il etait possible d'effectuer une requête update sur 2 champs en utilisant un select.

    Je m'explique par le code.

    Actuellement je fais ça:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    UPDATE matable1
    SET matable1.col3 = (SELECT matable2.col3 
                                   FROM matable2
                                   WHERE matable1.col1 = matable2.col1
                                   AND matable1.col2 = matable2.col2 )
    Puis

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    UPDATE matable1
    SET matable1.col4 = (SELECT matable2.col4 
                                   FROM matable2
                                   WHERE matable1.col1 = matable2.col1
                                   AND matable1.col2 = matable2.col2 )
    Et je voulais savoir si il était possible de faire un truc du genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    UPDATE matable1
    set matable1.col3,matable1.col4 = (SELECT matable2.col3 ,matable2.col4
                                   FROM matable2
                                   WHERE matable1.col1 = matable2.col1
                                   AND matable1.col2 = matable2.col2 )
    Merci d'avance

  2. #2
    Membre chevronné

    Profil pro
    Inscrit en
    Avril 2005
    Messages
    1 673
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 673
    Points : 1 775
    Points
    1 775
    Par défaut
    Indépendamment de ton SGBD que je connais pas, tu peux faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    UPDATE MATABLE1
    SET    MATABLE1.COL3 = (SELECT MATABLE2.COL3
                            FROM   MATABLE2
                            WHERE  MATABLE1.COL1 = MATABLE2.COL1
                                   AND MATABLE1.COL2 = MATABLE2.COL2),
           MATABLE1.COL4 = (SELECT MATABLE2.COL4
                            FROM   MATABLE2
                            WHERE  MATABLE1.COL1 = MATABLE2.COL1
                                   AND MATABLE1.COL2 = MATABLE2.COL2)
    Mais j'imagine que cette solution est encore trop redondante à ton goût ?

    Si c'est le cas, je sais que sous Oracle on peut faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
     
    8i CYRIL> select *
      2  from dvp1;
     
    X Y
    - -
    1 1
    2 2
     
    2 ligne(s) sélectionnée(s).
     
    8i CYRIL> select *
      2  from dvp2;
     
    A B
    - -
    1 x
    2 y
    3 a
    4 b
     
    4 ligne(s) sélectionnée(s).
     
    8i CYRIL> update dvp1 set (x, y) = ( select a, b
      2  from dvp2
      3  where dvp1.x = dvp2.a - 1 );
     
    2 ligne(s) mise(s) à jour.
     
    8i CYRIL> select *
      2  from dvp1;
     
    X Y
    - -
    2 y
    3 a
    Remarque : je ne maitrise pas cette technique mais apparemment il faudrait que le contenu de la sous-requête soit unique i.e. tu ne peux pas faire de traitement de masse...(les spécialistes d'Oracle me corrigeront si je me trompe).
    Modérateur des forums Oracle et Langage SQL
    Forum SQL : je n'interviens PAS plus de 4 fois dans une discussion car si c'est nécessaire cela prouve généralement que vous n'avez pas respecté : les règles du forum

  3. #3
    Membre habitué
    Inscrit en
    Mars 2004
    Messages
    126
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 126
    Points : 151
    Points
    151
    Par défaut
    Salut.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    UPDATE matable1
        SET matable1.col3 = matable2.col3,
           matable1.col4  = matable2.col4  
      FROM matable1
      INNER JOIN matable2
        ON ( matable2.col1 = matable1.col1 ) And
           ( matable2.col2 = matable1.col2 )

Discussions similaires

  1. [SQL SERVER 2005] Detail sur une requete avec un min(date)
    Par Djaiffe dans le forum Développement
    Réponses: 4
    Dernier message: 21/09/2012, 11h04
  2. requete Update sur champ date vide
    Par tarmo57 dans le forum Débuter
    Réponses: 10
    Dernier message: 28/04/2011, 19h01
  3. Question sur réplication SQL Server 2000 et type de champs
    Par ThomasD dans le forum Réplications
    Réponses: 2
    Dernier message: 27/10/2008, 18h55
  4. [SQL Server 2000] UPDATE sur tous les champs de ma table
    Par neeux dans le forum Langage SQL
    Réponses: 8
    Dernier message: 11/12/2006, 10h13
  5. [SQL Server] Requete statistique sur intervalle n et n-1
    Par Pasiphae dans le forum MS SQL Server
    Réponses: 13
    Dernier message: 22/05/2006, 15h55

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