我是sql的新手,不能自己做。所以我需要你的帮助。 我想在列中对值进行排序,然后保存更改。但我不知道该怎么做。
表格如下:
Id | Name | SomeDescription
---------------------------
1 |Best | Description1
2 |Worth | Description2
3 |Good | Description3
我希望得到类似的东西:
Id | Name | SomeDescription
---------------------------
1 |Best | Description1
2 |Good | Description3
3 |Worth | Description2
所以我需要对“id”和“name”列进行排序。
我使用以下语句对“name”列的值进行排序:
SELECT * FROM games ORDER BY name ASC
但是如何对id列的值进行排序并保存表中的更改? 请帮忙。
答案 0 :(得分:21)
你必须使用第二张表
创建一个与games2
表具有相同结构的新表games
,确保ID自动递增
CREATE TABLE `games2` LIKE `games`;
将数据复制到games2
INSERT INTO `games2` (`Name`, `SomeDescription`) SELECT `Name`, `SomeDescription` FROM `games` ORDER BY `Name`
删除或移动旧表
-- DROP TABLE `games`;
-- or
RENAME TABLE `games` TO `games1`;
将新表重命名为旧名称
RENAME TABLE `games2` TO `games`;
这些步骤将产生您想要的效果。
答案 1 :(得分:4)
您可以使用ROW_NUMBER排名功能对行重新编号。
SELECT UnsortedId = id
, SortedId = ROW_NUMBER() OVER (ORDER BY g.name, g.id)
FROM games
答案 2 :(得分:1)
create table new as select * from games order by name;
然后使用
删除游戏桌 drop table games;
现在再次使用相同的属性和数据创建游戏表,使用相同的属性和数据(这里排序是可选的),
create table games as select * from new order by name;
现在删除临时表'new'
drop table new;
现在检查一下你的桌子。它必须整理出来。
答案 3 :(得分:1)
您可以使用更简单的alter table命令。
mysql> ALTER TABLE games ORDER BY name asc;
这就是全部!
答案 4 :(得分:0)
您可以同时对两个字段进行排序。
SELECT *
FROM games
ORDER BY id DESC, name ASC
我不明白表格中保存更改的含义。 ORDER BY
,只是更改您正在查看的显示,除非您执行UPDATE
,否则不会更改表格中的数据。
如果您不熟悉SQL,那么网上有很多教程可以提供帮助:
根据评论进行编辑,这可以一步完成:
create table #temp
(
id int,
name varchar(50),
somedesc varchar(50)
)
insert into #temp values (1, 'best', 'desc1')
insert into #temp values (2, 'worth', 'desc2')
insert into #temp values (3, 'good', 'desc3')
update t1
SET t1.id = t2.rn
, t1.somedesc = t1.somedesc
FROM #temp t1
JOIN
(
select id, name, somedesc, row_number() over(order by name, id) as rn
from #temp
) t2
on t1.id = t2.id
select *
from #temp
order by id
drop table #temp
答案 5 :(得分:0)
这是我的解决方法,愚蠢的简单方法:
SELECT SortKeyValue (添加任何其他固定值,只是不包括现有序列) INTO #Temp FROM SourceTable;
TRUNCATE TABLE SourceTable
INSERT INTO SourceTable(SortKeyValue,DisplayOrder (以及其他字段)) SELECT SortKeyValue,ROW_NUMBER()以上(按SortKeyValue排序)为DispOrd (以及其他字段) FROM #Temp;
答案 6 :(得分:-2)
SQL> SELECT * FROM游戏 ORDER BY ID,NAME;