0

我正在尝试使用返回日期的子查询和 WHERE 子句的另一个子查询来更新 MySQL 表的一列。

就这个:

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 引擎的响应是“子查询返回超过 1 行”。

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_bbwtk_recur_subsmsisdn 列值匹配的所有日期值。

于 2010-06-14T23:34:09.837 回答
1

这可能会让您大吃一惊,但是您的子查询之一返回的不止一行!

在您设置的情况下,这是不允许的。这两个子查询中的每一个都必须返回一行且仅返回一行。或者没有行。

单独执行每个子查询并确定哪个子查询返回多行。如果它们不应返回超过一行,则您的数据可能是错误的。如果它们应该返回多行,您要么想要修改数据以使其不返回(正如我假设你所期望的那样),要么添加一个LIMIT子句。MAX或者在查询之外添加一个聚合函数(如),以对返回的多行进行适当的处​​理。

于 2010-06-14T23:34:24.233 回答