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 :

Problème SQL avec conditions sur un UPDATE


Sujet :

Langage SQL

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    1
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 1
    Points : 1
    Points
    1
    Par défaut Problème SQL avec conditions sur un UPDATE
    Bonjour,

    Je suis un peu rouillé en SQL alors je viens chercher un peu d'aide.
    SGBD = Oracle 10

    Voilà le code simplifié de départ :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    UPDATE table1 a SET a.champ1=
      (SELECT a.champ2*COUNT(*) 
       FROM table2 b 
       WHERE  contraintes);
    COMMIT;
    ("contraintes" remplace de façon schématique toutes les conditions where qui se trouve dans mon script)

    Mais suite à une modification, ce code doit être valable seulement pour mes données avant 2008. A partir de 2008, il faut donc que je précise une condition :

    - pour date<=2007 alors script normal
    - pour date >= 2008 alors script modifié

    J'ai donc fait ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    UPDATE table1 a SET a.champ1=
      (SELECT a.champ2*count(*) 
       FROM table2 b 
       WHERE contraintes 
       AND b.date<=2007);
    COMMIT;
    
    UPDATE table1 a SET a.champ1=
      (SELECT a.champ2*count(*) 
       FROM table2 b 
       WHERE contraintes 
       AND b.date>=2008 AND b.type<>'Ancien');
    COMMIT;[/COLOR]
    Mais le premier update est écrasé par le second et je n'obtiens au final qu'une mise à jour de mon champ a.champ1 pour la date>=2008. Le champ est null pour la date<=2007.

    Comment puis-je faire en sorte de faire la mise à jour pour l'ensemble de mes données (toutes les dates) avec les 2 traitements spécifiques ? Je pense qu'il faut mettre en place une contrainte mais je ne vois pas vraiment comment ?

    Toute aide sera la bienvenue Merci d'avance !

  2. #2
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 849
    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 849
    Points : 52 982
    Points
    52 982
    Billets dans le blog
    6
    Par défaut
    Utilisez un CASE pour combiner vos différentes possibilités.

    En gros :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    update table1
    set colonne1 = (select ??? 
                    FROM   b 
                    WHERE  colX = CASE 
                                     WHEN table1.colZ = b.toto THEN 123
                                     WHEN table1.colZ <> b.toto THEN 456
                                     ELSE 789
                                  END)
    Comme vous n'avez pas respecté la charte de postage, difficile de vous en dire plus.

    A +

Discussions similaires

  1. UPDATE d'un tuple avec condition sur le meme champ
    Par zwan.bourg dans le forum Requêtes
    Réponses: 4
    Dernier message: 10/09/2009, 12h32
  2. Réponses: 1
    Dernier message: 22/12/2008, 10h15
  3. [Access] requete sql avec condition sur date
    Par qeja dans le forum Langage SQL
    Réponses: 4
    Dernier message: 25/03/2006, 23h54
  4. update avec condition sur autre table
    Par allowen dans le forum Langage SQL
    Réponses: 5
    Dernier message: 01/04/2005, 15h02
  5. UPDATE avec condition sur d'autres tables
    Par guda dans le forum Langage SQL
    Réponses: 7
    Dernier message: 10/03/2005, 11h20

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