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 :

Faire un update en liant deux tables


Sujet :

Langage SQL

  1. #1
    Membre du Club
    Femme Profil pro
    Technicien maintenance
    Inscrit en
    Mai 2015
    Messages
    84
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 31
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Mai 2015
    Messages : 84
    Points : 49
    Points
    49
    Par défaut Faire un update en liant deux tables
    Bonjour,

    Je travaille sur WinDev 19 avec une base oracle.

    Je vous explique mon problème :

    Je dispose de deux tables, une BDD_ENTETE et l'autre BDD_DETAIL.
    Dans BDD_ENTETE j'ai plusieurs champs dont deux qui apparaissent également dans BDD_DETAIL.
    La première identifie un article, NUM_ART et est unique dans BDD_ENTETE mais ne l'ai pas dans BDD_DETAIL, elle apparaît
    autant de fois qu'il y a de détail d'un article. La seconde est "Solde" et peut être égale à "Oui" ou vide.

    J'aimerais faire un update pour dire de mettre "Oui" dans "Solde" de BDD_DETAIL si la colonne "Cloture"="Oui".
    Cette partie fonctionnait.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sql="UPDATE BDD_DETAIL SET BDD_DETAIL.SOLDE='Oui' WHERE BDD_DETAIL.CLOTURE='Oui'
    J'ai donc voulu faire la seconde update sur BDD_ENTETE qui dit :
    Si toutes les NUM_ART identique de BDD_DETAIL ont le solde qui est égale à "oui" alors BDD_ENTETE.Solde="Oui".

    Par exemple:
    BDD_DETAIL
    NUM_ART : 1; 1; 3 //Le NUM_ART n'est pas unique dans cette BDD
    Cloture : Oui; ;Oui
    Solde : ;Oui

    Le NUM_ART 1 n'as pas tous les NUM_ART cloturé donc il n'est pas soldé mais le NUM_ART 3 lui est cloturé donc il est soldé.

    J'aimerais donc que dans ma BDD_ENTETE ce soit comme ceci :
    NUM_ART : 1 ; 3 //Ici le NUM_ART est UNIQUE
    Solde : ;Oui

    Merci pour votre aide.

  2. #2
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 136
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 136
    Points : 38 909
    Points
    38 909
    Billets dans le blog
    9
    Par défaut
    Bonjour,

    De base une requête qui teste l'absence d'une ligne détail non clôturée semble être la solution, mais ...
    ... difficile de vous répondre si vous ne communiquez pas la description exacte de vos 2 tables (idéalement le DDL, c'est à dire les ordres CREATE TABLE)
    Précisez également quelles sont les colonnes qui permettent de faire la jointure entre entête et détail
    Précisez enfin quelles sont les valeurs possibles de la colonne BDD_DETAIL.CLOTURE : oui, non, autre ?...

  3. #3
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Customer Success Manager @Vertica
    Inscrit en
    Septembre 2008
    Messages
    8 452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Customer Success Manager @Vertica
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 452
    Points : 17 820
    Points
    17 820
    Par défaut
    Votre modélisation a l'air extrêmement mauvaise, néanmoins difficile d'en être certain avec aussi peu d'information.
    Essayez ainsi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    update bdd_entete
       set solde    = 'Oui'
     where num_art in ( select num_art
                          from bdd_detail
                      group by num_art
                        having count(*) = count(case solde when 'Oui' then 1 end) );

Discussions similaires

  1. Réponses: 2
    Dernier message: 07/05/2009, 14h52
  2. Comment faire un rapport à partir de deux tables !?
    Par linger dans le forum SAP Crystal Reports
    Réponses: 1
    Dernier message: 30/03/2009, 20h18
  3. [Access] Update liant deux tables
    Par zapatta dans le forum Langage SQL
    Réponses: 6
    Dernier message: 14/09/2006, 16h17
  4. Faire une procédure stockée avec deux tables
    Par mister3957 dans le forum Langage SQL
    Réponses: 3
    Dernier message: 17/03/2006, 13h54
  5. [Debutant] faire un update sur tout une table
    Par Karibou dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 27/07/2005, 14h44

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