MySQL选择最后一条记录并更新它。

8
我想选择表中最后一条记录并更新其名称。
UPDATE item 
SET name = (SELECT name FROM pds
            WHERE id = 9)
WHERE id=(SELECT id ORDER BY id DESC LIMIT 1);

然而,当执行时所有记录的名称都会发生变化。

也尝试过:

UPDATE item 
SET name = (SELECT name FROM pds
            WHERE id = 9)
WHERE id=(SELECT id FROM item ORDER BY id DESC LIMIT 1);

WHERE id = (SELECT MAX(id) FROM item); 可能是这样的吗? - Dacaspex
@Dacaspex 我得到了与我的第二个查询相同的错误(错误代码:1093。您不能在FROM子句中指定目标表“item”进行更新)。 - Roberts Rakvics
2个回答

11
在MySQL中,您可以对update语句应用order by和limit子句:

在MySQL中,您可以对update语句应用order by和limit子句:

UPDATE item 
SET name = (SELECT name FROM pds
            WHERE id = 9)
ORDER BY id DESC
LIMIT 1

1

只需使用 limitorder by

update item
    set name = (select name from pds where id = 9)
    order by id desc
    limit 1;

您的第二个版本应该可以工作……但是MySQL可能会生成语法错误。请尝试以下内容:

UPDATE item i CROSS JOIN
       (SELECT MAX(i2.id) as maxid FROM item i2) mi
    SET i.name = (SELECT pds.name FROM pds WHERE pds.id = 9)
    WHERE i.id = mi.maxid;

第一个版本在语法上是正确的,但它没有FROM子句,因此它使用来自外部查询的id值--并仅检查id是否等于自身。在selectwhere子句中使用子查询时,始终使用限定列名。我建议始终这样做,但对于这些子句中的子查询来说,这尤其重要。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接