2010-06-14 14 views
0

J'essaie de mettre à jour une colonne de la table MySQL avec une sous-requête qui retourne une date, et une autre sous-requête pour la clause WHERE.Mise à jour de MySQL avec deux sous-requêtes

Voici ce:

UPDATE wtk_recur_subs_temp 
    SET wtk_recur_date = (SELECT final_bb.date 
          FROM final_bb, wtk_recur_subs 
          WHERE final_bb.msisdn = wtk_recur_subs.wtk_recur_msisdn) 
WHERE wtk_recur_subs_temp.wtk_recur_msisdn IN (select final_bb.msisdn 
               from final_bb) 

La réponse du moteur MySQL est "sous-requête renvoie plus de 1 ligne".

Répondre

1

Utilisation:

UPDATE wtk_recur_subs_temp, 
     final_bb, 
     wtk_recur_subs 
    SET wtk_recur_subs_temp.wtk_recur_date = final_bb.date 
WHERE final_bb.msisdn = wtk_recur_subs.wtk_recur_msisdn 
    AND wtk_recur_subs_temp.wtk_recur_msisdn = final_bb.msisdn 

L'erreur est parce que:

SET wtk_recur_date = (SELECT final_bb.date 
         FROM final_bb, wtk_recur_subs 
         WHERE final_bb.msisdn = wtk_recur_subs.wtk_recur_msisdn) 

... la valeur final_bb.date est toutes les valeurs de date où la colonne final_bb et wtk_recur_subs msisdn valeurs correspondent.

+0

Merci Ponches OMG. J'ai compris mon erreur dans la requête et maintenant il est mis à jour comme prévu. Cordialement, Juillet –

1

Cela peut vous choquer, mais l'une de vos sous-requêtes renvoie plus d'une ligne!

Ceci n'est pas autorisé dans les circonstances que vous avez définies. Chacune de ces deux sous-requêtes doit renvoyer une et une seule ligne. Ou pas de lignes.

Effectuez chaque sous-requête individuellement et déterminez laquelle renvoie plus d'une ligne. Si elles ne doivent pas renvoyer plus d'une ligne, vos données peuvent être erronées. Si elles doivent renvoyer plusieurs lignes, vous souhaiterez modifier les données afin qu'elles ne le fassent pas (comme je suppose que vous le souhaitez) ou ajouter une clause LIMIT. Ou ajoutez une fonction d'agrégat (comme MAX) en dehors de la requête pour faire quelque chose de correct avec les lignes multiples renvoyées.

+0

Charles, merci pour l'explication complète sur les sous-requêtes. À la votre! –