MySQL:如何排序 BY 和 SET ID?



我已经用谷歌搜索过,但找不到解决方案。

我有两列,分别称为order_idname。我想ORDER BY name然后SETorder_id.

喜欢这个:

order_id   name
1          Arya
2          Herbert
3          Paul
4          Peter
5          Tiffany

我的 id 列是int(4),默认值是0。这不是PRIMARYUNIQUE.(它也不是主id,主id当然是PRIMARY

如何使用 SQL 执行此操作?

你可以使用ROW_NUMBER(MySQL 8.0+(:

SELECT name, ROW_NUMBER() OVER(ORDER BY name) AS rn
FROM tab
ORDER BY rn;

更新:

UPDATE tab
SET order_id = (SELECT rn FROM (SELECT name,ROW_NUMBER() OVER(ORDER BY name) AS rn
FROM tab)s
WHERE s.name = tab.name); -- assuming that name is UNIQUE

DBFidde 演示

对于 8.0 <版本,您可以使用以下内容:>

select @rn := 0;
UPDATE tbl T1
JOIN (select @rn := @rn + 1 rn, `name` from tbl order by `name`) T2
ON T1.`name` = T2.`name`
SET T1.order_id = T2.rn

演示

与您的问题相关的有用文章: MySQL 更新联接

由于您的 mysql 版本低于 8.0,因此您必须手动生成 orderid 以下可以帮助您

select  t.*, 
@rownum := @rownum + 1 AS order_id from 
(
select * from
tab o order by name asc
)  as t , (SELECT @rownum := 0) r

http://www.sqlfiddle.com/#!9/ae3fda/3

相关内容

最新更新