在下面的查询中,我想限制它为 subs
table。但它总是出错,我哪里出错了?
UPDATE subs t1
INNER JOIN imp_subscriptionlog t2
ON t1.subscription_id = t2.subscription_id
SET t1.cancellation_date = t2.date
WHERE t2.event = 'subscription_cancelled'
LIMIT 35
这是错误:
更新和限制的用法不正确
错误代码1221。
2条答案
按热度按时间xu3bshqb1#
LIMIT
仅允许在单表更新中使用,如文档中所述:对于单表语法,[…]如果
ORDER BY
子句时,行将按指定的顺序更新。这个LIMIT
子句对可以更新的行数进行了限制。对于多表语法,
ORDER BY
以及LIMIT
无法使用。您可以重写查询以使用相关子查询而不是联接:
笔记:
您应该指定
order by
子句,否则未定义实际更新哪些行该查询隐式地假定在查询中始终只有一个匹配行
imp_subscriptionlog
中的每一行subs
; 如果不是这样,那你必须order by
以及limit 1
或者使用聚合我们还可以通过添加
where
查询的子句以下是查询的“更安全”版本,它将更新到另一个表中可用的最大日期值,同时不修改不匹配的行:
vshtjzan2#
更新sub1
内部连接(