能否用单条SQL语句将order_字段设为ORDER BY的排序结果?
可以通过单条SQL语句实现需求
完全不需要先查询再在应用层处理,直接用单条SQL就能完成order_字段的更新,以下是主流数据库的实现方式:
MySQL
先确保order_字段已存在(如果还没添加,先执行新增字段的语句),再通过用户变量生成排序序号并关联更新:
-- 新增order_字段(首次执行需要) ALTER TABLE table_ ADD COLUMN order_ INT; -- 单条更新语句 UPDATE table_ t JOIN ( SELECT id, @row := @row + 1 AS new_order FROM table_, (SELECT @row := 0) r ORDER BY label ASC ) s ON t.id = s.id SET t.order_ = s.new_order;
PostgreSQL
利用ROW_NUMBER()窗口函数生成排序序号,再关联更新:
-- 新增order_字段(首次执行需要) ALTER TABLE table_ ADD COLUMN order_ INT; -- 单条更新语句 UPDATE table_ t SET order_ = s.new_order FROM ( SELECT id, ROW_NUMBER() OVER (ORDER BY label ASC) AS new_order FROM table_ ) s WHERE t.id = s.id;
SQL Server
同样使用ROW_NUMBER()窗口函数,通过CTE(公共表表达式)实现更新:
-- 新增order_字段(首次执行需要) ALTER TABLE table_ ADD order_ INT; -- 单条更新语句 WITH ranked AS ( SELECT id, ROW_NUMBER() OVER (ORDER BY label ASC) AS new_order FROM table_ ) UPDATE t SET t.order_ = r.new_order FROM table_ t JOIN ranked r ON t.id = r.id;
这些语句都会直接将order_字段设置为按label升序排序后的序号,一步到位完成需求。
内容的提问来源于stack exchange,提问作者Chris972
相关产品推荐
相关产品推荐

