我正在尝试使用返回日期的子查询和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引擎的响应是“Subquery返回超过1行”。
答案 0 :(得分: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_subs
msisdn列值匹配的所有日期值。
答案 1 :(得分:1)
这可能会让你感到震惊,但是你的一个子查询返回了多行!
在您设置的情况下不允许这样做。这两个子查询中的每一个都必须返回一行而且只返回一行。或者没有行。
自己执行每个子查询,并确定哪个子查询返回多行。如果他们不应该返回多行,那么您的数据可能是错误的。如果它们应该返回多行,那么您要么修改数据,要么不修改(如我所假设的那样),或者添加LIMIT
子句。或者在查询外添加一个聚合函数(如MAX
),以便对返回的多行执行适当的操作。