我有一个玩家数据库,其中玩家ID不是连续的:
1球员1
2球员2
16球员16
27球员27
28球员28
我想保持玩家的顺序,但是改变他们的ID以使它们变为顺序(即以1为增量上升)。
可以使用SQL语句实现吗?
期望的结果:
1球员1
2球员2
3球员16
4球员27
5球员28
我有一个28,000行的数据库,其中25,000左右将被删除,我想按顺序移动剩余的3000个。
先谢谢你的帮助,我希望我解释得很好。
答案 0 :(得分:1)
假设您的差距位于桌子的ID
字段中,则根本不需要担心漏洞。 ID
列应该完全无意义,并且纯粹用于将其他列中的值绑定在一起。在ID值中存在差距是很常见的,并且根本不会影响您的表格(除了美学)。
例如,您的第三列与您的ID
相等。我假设这是您关心的实际数据(例如玩家标签)。为此播放器运行SELECT
时,您可以根据 列运行查询。 player_id
2
id
的玩家可以1
SELECT * FROM players WHERE player_id = 2;
- 这完全没问题!
例如,如果您想要返回此播放器,则可以运行:
ID | Name | player_id
-------------------------
1 | player | 2
可能会返回:
ID
上面的1
3000
并不重要,因为您已经拥有了所关注的所有数据。它只是一个索引。
你说你要删除WHERE
左右的行,即使没有“订单”本身,这仍然完全正常。只需使用https://github.com/xiph/vorbis
子句根据表中的其他列之一进行删除。这将挑选出要删除的目标行(留下更多的空白)。
希望这有帮助!
答案 1 :(得分:0)
如果它只是一个简单的开启,你就可以在你的数据库上运行这样的东西:
update players as p
set p.id = (
SELECT count(*) from (select id from players) as sub
where p.id > sub.id
)
如果你想从1开始,请使用>=