在updatesql查询中使用'limit'

91zkwejq  于 2021-07-24  发布在  Java
关注(0)|答案(2)|浏览(525)

在下面的查询中,我想限制它为 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。

xu3bshqb

xu3bshqb1#

LIMIT 仅允许在单表更新中使用,如文档中所述:
对于单表语法,[…]如果 ORDER BY 子句时,行将按指定的顺序更新。这个 LIMIT 子句对可以更新的行数进行了限制。
对于多表语法, ORDER BY 以及 LIMIT 无法使用。
您可以重写查询以使用相关子查询而不是联接:

update subs
set cancellation_date = (
    select t2.date
    from imp_subscriptionlog t2 
    where t2.subscription_id = subs.subscription_id and t2.event = 'subscription_cancelled'
)
order by ???
limit 35

笔记:
您应该指定 order by 子句,否则未定义实际更新哪些行
该查询隐式地假定在查询中始终只有一个匹配行 imp_subscriptionlog 中的每一行 subs ; 如果不是这样,那你必须 order by 以及 limit 1 或者使用聚合
我们还可以通过添加 where 查询的子句
以下是查询的“更安全”版本,它将更新到另一个表中可用的最大日期值,同时不修改不匹配的行:

update subs
set cancellation_date = (
    select max(t2.date)
    from imp_subscriptionlog t2 
    where t2.subscription_id = subs.subscription_id and t2.event = 'subscription_cancelled'
)
where exists (
    select 1
    from imp_subscriptionlog t2 
    where t2.subscription_id = subs.subscription_id and t2.event = 'subscription_cancelled'
)
order by ???
limit 35
vshtjzan

vshtjzan2#

更新sub1
内部连接(

//your select statement another table

      //condition

      //Now use limit
       Limit 10
      )
     On 
      sub.data = table.date
      set

相关问题