2

我试图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没有正确更新。请帮我

4

3 回答 3

4

您在声明中有错字,您使用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,但不适用于其他数据库。

于 2013-09-02T09:33:10.567 回答
4

您的查询在标准 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

在此处查看小提琴。

于 2013-09-02T09:43:36.390 回答
1

尝试这个:

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 和子查询中使用同一个表。

如果您的情况,请写两个查询。

第一个获得最大值,第二个确实更新

于 2013-09-02T09:34:14.817 回答