[SQL] Erreur avec UPDATE

Bonjour,

j'ai une erreur avec cette requête que je n'arrive pas à contourner :

UPDATE dap
SET dap.numCC = da.numCC
WHERE dap.numCh = da.numCh;

La réponse est de MySQL est :

MySQL a répondu:
#1109 - Table inconnue 'da' dans where clause

Je comprends qu'il ne me trouve pas la table 'da' car il n'y a pas de FROM comme dans un SELECT... Mais je ne vois pas comment faire en sorte que ça marche...
Je pense que la requête est claire sur ce que je souhaite faire... Si y'a besoin de plus d'explications, y'a pas de problème...

Merci d'avance !!
Configuration: Windows 2000
Firefox 3.0.4

9 réponses

  1. Bonjour

    Si j'en crois mon manuel mysql, depuis la version 4.04, mysql accepte :
    UPDATE dap,da
    SET dap.numCC = da.numCC
    WHERE dap.numCh = da.numCh;
    0
    1. Sachant que j'ai MySQL 3.23.49, ça ne fonctionne pas, pour preuve voici l'erreur retournée :

      #1064 - Something is wrong in your syntax près de
      ' da SET dap.numCC = da.numCC WHERE da'
      à la ligne 1

      Si tu as d'autres idées ou quelqu'un d'autre, je suis preneur !!
      0
      1. Es-tu sûr que MySQL en version 3 soit capable de faire des update multitable ??? Je crois que ça viens avec la version 4. Mais je peux me tromper...
        0
    2. Faire une requête pour extraire tous les numCC,numCh de la table da
      Puis une boucle qui met à jour la table dap pour chacun des enregistrement trouvés ci-dessus.

      Beaucoup moins élégant et efficace que la solution en une seule requête, évidemment
      0
      1. Je n'ai jamais fait de boucle en SQL, je le faisais toujours en PhP, mais là je dois le faire en SQL...
        Tu pourrais m'aider en me montrant la structure stp ??
        0
        1. ESSAYE CA:

          UPDATE dap
          SET dap.numCC = da.numCC
          FROM dap
          INNER JOIN da ON dap.numCh = da.numCh;
          0
        2. @CiscoVoici l'erreur retournée :

          #1064 - Something is wrong in your syntax près de
          'FROM dap INNER JOIN da ON dap.numCh = da.nu'
          à la ligne 3

          Je pense que c'est le FROM qu'il n'aime pas, la seule chose qu'il veut attendre c'est un WHERE ou rien, à mon avis...

          Merci quand même...
          0
      2. Je ne pensais pas à une boucle en mysql. Je pensais bien à une boucle en PHP. Il y a quelque chose qui t'interdit d'écrire un petit script ?
        0
        1. Techniquement, je peux le faire en PhP sans problème... Mais moralement, ça ne passe pas très bien parce que ça ne dépend pas que de moi... Trop long à expliquer...
          Bref, il me faut résoudre ce problème uniquement en SQL...
          0
      3. salut a toi

        et si tu exécuter ça avec une sous requête du genre

        UPDATE dap
        SET dap.numCC = da.numCC
        WHERE dap.numCh = (SELECT numCh FROM da WHERE ... ;) ;
        0
        1. Tu pourrais aussi essayer "abracadabra".
          Après tout, moi aussi j'ai le droit de proposer n'importe quoi.
          0
          1. si c'est pour moi cette dernière réponse, j'essaye juste de guider je n'est peut être pas la solution exacte ou peut être pas du tout une bonne réponse mais c'est pas ce dernier commentaire qui fera avancer les choses

            j'essaye juste d'amener mon petit grain de sel

            je proposait ça juste dans un soucis du problème premier qui était de "comment lui faire trouver la table da"

            désolé d'avoir essayé ...
            0
            1. désolé d'avoir essayé
              Justement, si tu avais essayé, tu n'aurais pas fait cette proposition. Tu essayais de guider fredo vers quoi ? Tu ne sais pas toi même. La requête que tu proposais perpétuait l'erreur précédente (utiliser la table da, inconnue au niveau du SET).
              Je n'ai rien contre toi personnellement. Mais je vois beaucoup trop de 'suggestions' farfelues sur ce forum.
              Je crois qu'il faudrait que les gens comprennent que le fait d'être de bonne volonté (car tu l'es, je n'en doute pas) les dispense d'être rigoureux.
              0
              1. Oups... Il fallait lire "ne les dispense pas", bien sûr.
                0