mysql update 报错

meduke 2017-07-21 03:44:40

UPDATE pass_activity SET overall_sort = (10 - STATUS) * 100000000 + instance_number + (SELECT
n.num FROM (SELECT ( CASE WHEN vip_rank = 1 AND vip_expdate > NOW() THEN 100
WHEN vip_rank = 2 AND vip_expdate > NOW() THEN 200
WHEN vip_rank = 3 AND vip_expdate > NOW() THEN 300 ELSE 0 END)
+ (CASE WHEN ue.identity_verified IS NOT NULL THEN 50 ELSE 0 END)
AS num
FROM accuvally_user u JOIN accuvally_user_extends ue ON u.account = ue.account WHERE u.account = pass_activity.create_by) AS n)
WHERE id IN( 5395653487500, 4394645338900,7393945083100,1343275124100)


pass_activity表的overall_sort 栏位 需要根据accuvally_user表(vip_rank vip_expdate 2个栏位 )和accuvally_user_extends 表(identity_verified 一个栏位)通过 用户id进行关联。算出对应的排序值。我这种写法有问题,报错:
1 queries executed, 0 success, 1 errors, 0 warnings

查询:UPDATE pass_activity SET overall_sort = (10 - status) * 100000000 + instance_number + (SELECT n.num FROM (SELECT ( CASE WHEN vip...

错误代码: 1054
Unknown column 'pass_activity.id' in 'where clause'

请问怎么改?
...全文
171 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
ACMAIN_CHM 2017-07-23
  • 打赏
  • 举报
回复
没什么其它方式, MYSQL中的UPDATE只支持 update a inner join b on ... set ...
二月十六 2017-07-21
  • 打赏
  • 举报
回复

UPDATE  pass_activity
SET     overall_sort = ( 10 - STATUS ) * 100000000 + instance_number
        + ( SELECT  ( CASE WHEN vip_rank = 1
                                AND vip_expdate > NOW() THEN 100
                           WHEN vip_rank = 2
                                AND vip_expdate > NOW() THEN 200
                           WHEN vip_rank = 3
                                AND vip_expdate > NOW() THEN 300
                           ELSE 0
                      END )
                    + ( CASE WHEN ue.identity_verified IS NOT NULL THEN 50
                             ELSE 0
                        END ) AS num
            FROM    accuvally_user u
                    JOIN accuvally_user_extends ue ON u.account = ue.account
            WHERE   u.account = pass_activity.create_by
          )
WHERE   id IN ( 5395653487500, 4394645338900, 7393945083100, 1343275124100 );
meduke 2017-07-21
  • 打赏
  • 举报
回复
UPDATE pass_activity a JOIN (SELECT pa.id,  ( CASE WHEN vip_rank = 1 AND vip_expdate > NOW() THEN 100
		WHEN vip_rank = 2 AND vip_expdate > NOW() THEN 200
		WHEN vip_rank = 3 AND vip_expdate > NOW() THEN 300 ELSE 0 END) 
	+ (CASE WHEN ue.identity_verified IS NOT NULL THEN 50 ELSE 0 END) 
	AS num
	FROM accuvally_user u JOIN accuvally_user_extends ue ON u.account = ue.account JOIN pass_activity pa ON u.account = pa.create_by) AS n
	ON a.id = n.id
	SET overall_sort = (10 - STATUS) * 100000000 + instance_number + n.num
	WHERE a.id IN( 5395653487500, 4394645338900,7393945083100,1343275124100)
刚刚我自己写的,应该是可以的。还有没有其他方式?

56,677

社区成员

发帖
与我相关
我的任务
社区描述
MySQL相关内容讨论专区
社区管理员
  • MySQL
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧