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 :

Division d'un update conditionnel.


Sujet :

Langage SQL

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 10
    Points : 6
    Points
    6
    Par défaut Division d'un update conditionnel.
    Bonjour, ayant la requête suivante:

    UPDATE TABLE_A
    SET CHAMP_1 = (SELECT CHAMP_2 FROM TABLE_B
    WHERE CONDITIONS_2)
    WHERE CONDITIONS_1

    Il s'avère que j'ai besoin de rajouter d'autres conditions dans le SELECT, afin d'effectuer ceci (impossible en SQL):

    UPDATE TABLE_A
    SET CHAMP_1 = ( (SELECT CHAMP_2 FROM TABLE_B
    WHERE CONDITIONS_2)
    +
    (SELECT CHAMP_2bis FROM TABLE_B
    WHERE CONDITIONS_2bis) )
    WHERE CONDITIONS_1

    Sachant que je ne peux recourir ni à une procédure, ni à un curseur (contraintes spécifiques...) et qu'étant donné la masse de données, je ne peux pas non plus utiliser une quelconque variable temporaire, quelqu'un aurait-il une idée?

    Merci d'avance,

    Cordialement,
    Ptiboua.

  2. #2
    Membre expérimenté Avatar de Yanika_bzh
    Homme Profil pro
    Responsable Applicatif et R&D
    Inscrit en
    Février 2006
    Messages
    1 144
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Responsable Applicatif et R&D
    Secteur : Finance

    Informations forums :
    Inscription : Février 2006
    Messages : 1 144
    Points : 1 738
    Points
    1 738
    Par défaut
    votre '+' signifie une concaténation de champs ?
    la condition
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    WHERE CONDITIONS_2
    ainsi que
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    WHERE CONDITIONS_2bis
    ne ramene qu'un et un seul enregistrement ?

    Quel est votre SGBD ?
    Dans la connaissance du monde, ceux qui ne savent rien en savent toujours autant que ceux qui n'en savent pas plus qu'eux. (Pierre Dac)

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 10
    Points : 6
    Points
    6
    Par défaut Re.
    Le + signifie que j'ai besoin d'additionner les 2 SELECT (qui normalement renvoient des float, ce sont des montants) puisque le premier va aller chercher une partie des valeurs que je veux, et le second l'autre partie (je n'ai pas le choix, les conditions 2 et 2bis sont légèrement différentes).
    J'ai en fait oublié un détail, ce n'est pas CHAMP_2 mais SUM(CHAMP_2), cela sélectionne donc plus d'un champ de façon à faire la somme.
    Par ailleurs, l'update doit se faire sur une table ayant une masse de données très importante, et sur toute la table, et mon SGBD est Oracle 8.

    Merci pour la réponse,

    Cordialement,
    Ptiboua.

    PS: Désolé de ne pouvoir mettre de façon plus explicite mes explications, mais je n'en ai malheureusement pas le droit

  4. #4
    Membre expérimenté Avatar de Yanika_bzh
    Homme Profil pro
    Responsable Applicatif et R&D
    Inscrit en
    Février 2006
    Messages
    1 144
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Responsable Applicatif et R&D
    Secteur : Finance

    Informations forums :
    Inscription : Février 2006
    Messages : 1 144
    Points : 1 738
    Points
    1 738
    Par défaut
    Une requete dans ce genre peut vous aider ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    UPDATE TableA set Champ1=
    select sum (tmp.a) from
    (
    select sum (Champ_2) a from TableB where Conditions_2 union all
    select sum (Champ_2bis) a from TableB where Conditions_2bis
    ) tmp
    Bon courage
    Dans la connaissance du monde, ceux qui ne savent rien en savent toujours autant que ceux qui n'en savent pas plus qu'eux. (Pierre Dac)

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 10
    Points : 6
    Points
    6
    Par défaut Re: éclaircissements.
    Si je comprend bien la requête, elle peut effectivement m'aider.
    Sachant que chaque SELECT SUM(CHAMP_2) dans la parenthèse renvoie une valeur de type float, l'utilisation de la somme sur l'UNION des deux permettrait de renvoyer le tout?

    Merci,

    Cdlmt, Ptiboua.

Discussions similaires

  1. UPDATE conditionnel entre 2 tables
    Par maestro1303 dans le forum Requêtes
    Réponses: 15
    Dernier message: 03/02/2014, 15h54
  2. Optimiser un update conditionnel
    Par awalter1 dans le forum SQL
    Réponses: 1
    Dernier message: 01/02/2013, 08h03
  3. update conditionnel sous oracle
    Par piment dans le forum Langage SQL
    Réponses: 3
    Dernier message: 12/07/2007, 13h48
  4. [Access ] Requete conditionnel dans un UPDATE??
    Par nicko5959 dans le forum Langage SQL
    Réponses: 6
    Dernier message: 28/06/2006, 05h39
  5. UPDATE conditionnelle
    Par Stabbquadd dans le forum SQL Procédural
    Réponses: 5
    Dernier message: 10/04/2006, 10h06

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