我正在尝试更新数据库中的字段,但遇到了一个很简单的问题:我想只更新具有最大ID编号的表中的一行。 我会做这样的事情:
UPDATE table SET name='test_name' WHERE id = max(id)
不幸的是它不起作用。有什么想法吗?
表结构
id | name
---|------
1 | ghost
2 | fox
3 | ghost
我想仅更新最后一行,因为ID号是最大的。
我正在尝试更新数据库中的字段,但遇到了一个很简单的问题:我想只更新具有最大ID编号的表中的一行。 我会做这样的事情:
UPDATE table SET name='test_name' WHERE id = max(id)
不幸的是它不起作用。有什么想法吗?
id | name
---|------
1 | ghost
2 | fox
3 | ghost
我想仅更新最后一行,因为ID号是最大的。
在这个位置不能使用 MAX()
函数,但是你可以这样做:
UPDATE table SET name='test_name' ORDER BY id DESC LIMIT 1;
对于多表查询,像@Euthyphro所问的那样,使用 table.column
。
错误提示表示id
列是不明确的。
示例:
UPDATE table1 as t1
LEFT JOIN table2 as t2
ON t2.id = t1.colref_t2
SET t1.name = nameref_t2
ORDER BY t1.id DESC
LIMIT 1
UPDATE table SET name='test_name' WHERE id = (SELECT max(id) FROM table)
UPDATE table SET name='test_name' WHERE id = (
SELECT uid FROM (
SELECT MAX(id) FROM table AS t
) AS tmp
)
这将创建一个临时表,允许在UPDATE和SELECT中使用同一张表,但代价是性能下降。
我认为iblue的方法可能是你最好的选择;另一个解决方案可能是将结果设置为变量,然后在UPDATE语句中使用该变量。
SET @max = (SELECT max(`id`) FROM `table`);
UPDATE `table` SET `name` = "FOO" WHERE `id` = @max;
如果您希望使用相同的ID运行多个查询,那么这将非常有用,但如果您只执行一个更新操作,则运行两个查询并不理想。
UPDATE table_NAME
SET COLUMN_NAME='COLUMN_VALUE'
ORDER BY ID
DESC LIMIT 1;
SELECT IN DELETE OR UPDATE CLAUSE.ORDER BY ID DESC LIMIT 1
这条语句。这样做会给你具有最大值的ID MAX(ID)
,就像你尝试过的那样。但是 MAX(ID)
不可用。虽然这是一个旧问题,但对于任何遇到此问题的人,您也可以尝试以下方法:
UPDATE
`table_name` a
JOIN (SELECT MAX(`id`) AS `maxid` FROM `table_name`) b ON (b.`maxid` = a.`id`)
SET a.`name` = 'test_name';
UPDATE MainTable
SET [Date] = GETDATE()
where [ID] = (SELECT MAX([ID]) FROM MainTable)
这对我来说完美无缺。
我需要用连续的数字更新一个表格。
这是我的做法。
UPDATE pos_facturaciondian fdu
SET fdu.idfacturacompra = '".$resultado["afectados"]."',
fdu.fechacreacion = '".$fechacreacion."'
WHERE idfacturaciondian =
(
SELECT min(idfacturaciondian) FROM
(
SELECT *
FROM pos_facturaciondian fds
WHERE fds.idfacturacompra = ''
ORDER BY fds.idfacturaciondian
) as idfacturaciondian
)
使用PHP时,我通常会运行mysqli_num_rows
,然后将结果放入变量中,然后执行一个UPDATE
语句,说ID =新创建的变量。有些人发帖说末尾不需要使用LIMIT 1
,但我喜欢这样做,因为它不会造成任何微小的延迟,但可以防止采取任何意外行动。
如果您刚刚插入了行,则可以使用PHP的mysqli_insert_id
函数自动将此ID返回给您,而无需运行mysqli_num_rows
查询。
mysqli_num_rows
将失败。 - ibluemysqli_num_rows
将返回2行,而最后一个ID仍然是3。 - iblue首先选择最大的ID,然后进行更新。
UPDATE table SET name='test_name' WHERE id = (SELECT max(id) FROM table)
UPDATE table SET name='test_name' WHERE id = (SELECT max(id) FROM (SELECT * FROM table))
。如果你决定给出负评,留下评论是一个好习惯,这样回答者就知道如何改进答案。 - luqo33