我已经用谷歌搜索过,但找不到解决方案。
我有两列,分别称为order_id
和name
。我想ORDER BY name
然后SET
升order_id
.
喜欢这个:
order_id name
1 Arya
2 Herbert
3 Paul
4 Peter
5 Tiffany
我的 id 列是int(4)
,默认值是0
。这不是PRIMARY
或UNIQUE
.(它也不是主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