我曾尝试为特定列设置max
值,但这对我来说不起作用。我不知道哪里出了问题。
UPDATE `upload_video`
SET order_id ='select max(order_id)+1
FROM upload_video'
WHERE `video_id` = 22
这是我的查询,我单独运行select max(order_id)+1 from upload_video
查询,它会给出结果。但是,如果我在更新查询中使用此查询,则该查询执行时不会出错。但是order_id
没有正确更新。请帮我
您的查询在标准SQL中几乎是正确的,您只需要使用括号()
而不是撇号'
:
SET order_id = (SELECT MAX(...) ...)
但是MySQL不允许在从同一个表中进行选择的同时更新表,解决方法是使用计算所需值的子查询,并将您的子查询与需要更新的表连接起来:
UPDATE
upload_video JOIN (SELECT COALESCE(MAX(order_id),0)+1 max_id
FROM upload_video) s
SET
upload_video.order_id=s.max_id
WHERE
video_id=22
请看这儿的小提琴。
您在语句中有一个拼写错误,您使用了UPADTE
而不是UPDATE
。
一个问题是,不要引用子查询。您使用了单引号,这意味着表达式select max(order_id)+1...
被解释为文本文本(varchar)。但您显然不希望这样(我猜order_id是一个数字)。您想要的是评估子查询。但是,如果您尝试:
UPDATE `upload_video`
SET order_id =(select max(order_id)+1
FROM upload_video)
WHERE `video_id` = 22
MySQL不允许(我不知道)。PostgreSQL等其他数据库允许它。因此,您可能需要两个语句:
select @id = coalesce(max(order_id), 0) + 1 FROM upload_video;
UPDATE `upload_video` SET order_id = @id WHERE `video_id` = 22;
请注意,这在MySQL中有效,但在其他数据库中无效。
试试这个:
UPDATE `upload_video`
SET order_id =(select COALESCE(max(U2.order_id),0)+1
FROM upload_video U2)
WHERE `video_id` = 22
Peraphs此查询出错,因为MySql不希望在UPDATE和子查询中使用相同的表。
如果你的情况,请写两个问题。
第一个获得最大值,第二个更新