0

日付を返すサブクエリと WHERE 句の別のサブクエリを使用して、MySQL テーブルの 1 つの列を更新しようとしています。

はい、これ:

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)

MySQL エンジンからの応答は、「サブクエリが複数の行を返します」です。

4

2 に答える 2

1

使用する:

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

エラーの原因は次のとおりです。

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

... final_bb.date 値は、final_bbおよびwtk_recur_subsmsisdn 列の値が一致するすべての日付値です。

于 2010-06-14T23:34:09.837 に答える
1

これはあなたにとって非常にショックなことかもしれませんが、サブクエリの 1 つが複数の行を返しています!

これは、設定した状況では許可されていません。これら 2 つのサブクエリはそれぞれ、1 つの行のみを返す必要があります。または行がありません。

各サブクエリを個別に実行し、複数の行を返しているサブクエリを特定します。複数の行を返す必要がない場合は、データが間違っている可能性があります。それらが複数の行を返す必要がある場合は、データを変更して(期待どおりに)返さないようにするか、LIMIT句を追加する必要があります。または、クエリの外側に集計関数 ( などMAX) を追加して、返される複数の行で適切な処理を行います。

于 2010-06-14T23:34:24.233 に答える