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 :

update sur plusieurs tables


Sujet :

Langage SQL

  1. #1
    Membre régulier
    Inscrit en
    Novembre 2004
    Messages
    138
    Détails du profil
    Informations forums :
    Inscription : Novembre 2004
    Messages : 138
    Points : 70
    Points
    70
    Par défaut update sur plusieurs tables
    Bonjour,

    Ca doit etre assez simple, mais je ne trouve pas ....

    Je désire faire un update sur une tables en fonction de valeur d'une autre table :

    Ex :
    Table A
    A1 : AAA
    A2 : 5

    Table B
    B1 : AAA
    B2 : 10

    Le resultat à obtenir :

    Table A
    A1 : AAA
    A2 : 10 --> valeur mise à jour en fonction de la table B par rapport à la valeur correspondante entre A1 et B1

    Table B
    B1 : AAA
    B2 : 10

    Par avance merci de votre aide

    a+

  2. #2
    Membre averti Avatar de macben
    Inscrit en
    Mars 2004
    Messages
    546
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Mars 2004
    Messages : 546
    Points : 433
    Points
    433
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    UPDATE TableA SET A2 = (SELECT tb.B2 FROM TableA ta, TableB tb WHERE ta.A1 = ta.B1 AND ta.A1 = 'AAA')

  3. #3
    Membre habitué Avatar de souellet
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    155
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : Canada

    Informations forums :
    Inscription : Juillet 2003
    Messages : 155
    Points : 171
    Points
    171
    Par défaut
    Faut être certain que ta Table B contient une seule valeure possible, sinon tu vas avoir une erreur.

  4. #4
    Membre averti Avatar de macben
    Inscrit en
    Mars 2004
    Messages
    546
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Mars 2004
    Messages : 546
    Points : 433
    Points
    433
    Par défaut
    Citation Envoyé par souellet
    Faut être certain que ta Table B contient une seule valeure possible, sinon tu vas avoir une erreur.
    En effet je suis parti du principe que A1 et B1 sont les clés des tables respectives.

  5. #5
    Membre régulier
    Inscrit en
    Novembre 2004
    Messages
    138
    Détails du profil
    Informations forums :
    Inscription : Novembre 2004
    Messages : 138
    Points : 70
    Points
    70
    Par défaut
    Merci

    effectivement dans la table B il n'y a qu'une valeur possible.

  6. #6
    Membre régulier
    Inscrit en
    Novembre 2004
    Messages
    138
    Détails du profil
    Informations forums :
    Inscription : Novembre 2004
    Messages : 138
    Points : 70
    Points
    70
    Par défaut
    J'ai testé sur un enregistrement : --> c'est OK

    mais je voudrais le faire sur tous les enregistrements

    UPDATE TableA SET A2 = (SELECT tb.B2 FROM TableA ta, TableB tb WHERE ta.A1 = ta.B1 )

    mais ca fonctionne pas

    Tous les enregistrements de la table A se trouve dans la table B, mais la table B est composée de plus d'enregistrements que la table A

  7. #7
    Membre averti Avatar de macben
    Inscrit en
    Mars 2004
    Messages
    546
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Mars 2004
    Messages : 546
    Points : 433
    Points
    433
    Par défaut
    Essaie

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    UPDATE TableA ta, TableB tb SET ta.A2 = tb.B2 WHERE ta.A1 = tb.B1
    Je ne sais PAS DU TOUT si cela fonctionne, ni même si la syntaxe est bonne, mais je le sens bien

    EDIT : Non en fait ne fonctionne pas, mais cela peut te mettre sur la piste.

  8. #8
    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
    As-tu essayé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    UPDATE TableA
    SET A2 = (
        SELECT B2
        FROM TableB
        WHERE A1 = B1
        AND A1 = 'AAA')
    ?
    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

  9. #9
    Membre régulier
    Inscrit en
    Novembre 2004
    Messages
    138
    Détails du profil
    Informations forums :
    Inscription : Novembre 2004
    Messages : 138
    Points : 70
    Points
    70
    Par défaut
    oui j'essayé et ca fonction mais pour un ensemble d'enregistrement ( sans le critère AND A1 = 'AAA' )
    Ca ne fonctionne plus.



    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    UPDATE TableA ta, TableB tb SET ta.A2 = tb.B2 WHERE ta.A1 = tb.B1
    --> ca ne fonctionne pas non plus

    Pour l'instant le passe par une extraction de tous le mot clef (cf A1 dans mon exemple) et je traite un update par ligne.

    en attendant mieux; merci de vos contributions

  10. #10
    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
    Citation Envoyé par Jean-Matt
    ...mais pour un ensemble d'enregistrement ( sans le critère AND A1 = 'AAA' )
    Ca ne fonctionne plus.
    C'est-à-dire ? Que fait cette requête sans cette clause et que voudrais-tu qu'elle fasse (donne un exemple plus précis que dans ton 1er post) ?

    Citation Envoyé par Jean-Matt
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    UPDATE TableA ta, TableB tb SET ta.A2 = tb.B2 WHERE ta.A1 = tb.B1
    --> ca ne fonctionne pas non plus
    Tant mieux parce que tu n'es pas supposé effectuer d'UPDATE sur plus d'une table !
    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

  11. #11
    Membre régulier
    Inscrit en
    Novembre 2004
    Messages
    138
    Détails du profil
    Informations forums :
    Inscription : Novembre 2004
    Messages : 138
    Points : 70
    Points
    70
    Par défaut
    Voici un exemple ( en esperant etre plus claire)

    Ex :
    Table A
    Record 1
    A1 : AAA
    A2 : 5

    Record 2
    A1 : AAB
    A2 : 6

    Table B
    Record 1
    B1 : AAA
    B2 : 10

    Record 2
    B1 : AAB
    B2 : 7


    Le resultat à obtenir :

    Table A (apres update)
    Record 1
    A1 : AAA
    A2 : 10

    Record 2
    A1 : AAB
    A2 : 7

    Par avance merci

  12. #12
    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
    Quel résultat produit cette requête ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    UPDATE TableA
    SET A2 = (
        SELECT B2
        FROM TableB
        WHERE A1 = B1)
    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

  13. #13
    Membre régulier
    Inscrit en
    Novembre 2004
    Messages
    138
    Détails du profil
    Informations forums :
    Inscription : Novembre 2004
    Messages : 138
    Points : 70
    Points
    70
    Par défaut
    merci pour l'infos mais je pense que se serait plutot du style :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    UPDATE TableA 
    SET A2 = ( 
        SELECT B.B2 
        FROM TableB B,TableA A
        WHERE A.A1 = B.B1)
    Mais malheureusement ca fonctionne pas non plus

  14. #14
    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
    Ah mais nan justement il ne faut pas que tu utilises Table A dans la sous-requête.

    Ex :
    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
    SQL> select *
      2  from t1;
     
             X          Y
    ---------- ----------
             1          5
             2          6
     
    SQL> select *
      2  from t2;
     
             X          Y
    ---------- ----------
             1         10
             2          7
     
    SQL> update t1
      2  set y = (select y
      3  from t2
      4  where t1.x = t2.x);
     
    2 ligne(s) mise(s) à jour.
     
    SQL> select *
      2  from t1;
     
             X          Y
    ---------- ----------
             1         10
             2          7
    cqfd non ?
    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

  15. #15
    Membre régulier
    Inscrit en
    Novembre 2004
    Messages
    138
    Détails du profil
    Informations forums :
    Inscription : Novembre 2004
    Messages : 138
    Points : 70
    Points
    70
    Par défaut
    autant pour moi, une mauvaise adaptation de ma part sur les tables reelles
    maintenant --> tout est ok

    merci bcq

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

Discussions similaires

  1. [MySQL] Update sur plusieurs tables
    Par yann18 dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 28/05/2010, 10h33
  2. Problème update sur plusieurs tables
    Par Fabdeuche dans le forum SQL
    Réponses: 4
    Dernier message: 22/04/2010, 16h16
  3. [MS SQL]faire un UPDATE sur plusieurs tables en meme temps
    Par touille dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 18/07/2007, 09h45
  4. UPDATE sur plusieurs tables ?
    Par Mos dans le forum Langage SQL
    Réponses: 3
    Dernier message: 12/04/2007, 08h37
  5. Update sur plusieurs tables
    Par yoyopi dans le forum DB2
    Réponses: 4
    Dernier message: 24/07/2006, 08h22

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