【问题标题】:select temporary column with ascending values added选择添加了升序值的临时列
【发布时间】:2018-08-15 05:38:27
【问题描述】:

我是这个论坛的新手,我正在学习 MYSQL。

我正在创建一个 NBA 球员数据库,我已将大约 540 条球员记录添加到表 nba_players 中。插入记录时,nba_players.player_id 列设置为 auto_increment,但它从 531 开始递增,并以 1000 结束。与其截断整个表并重新应用 INSERT 语句,我想尝试不同的解决方案。

我使用的是 Workbench 8.0,因此我通过 Workbench 用户界面结合使用查询语言和表操作。

因此,我正在研究的替代解决方案是使用 SELECT 语句创建一个临时列,以显示一个值为 2 到 540 的临时列。然后我将复制整个列,然后使用工作台使用 right 粘贴行单击“粘贴行”到新的 SELECT 查询中:

SELECT player_id FROM nba_players

我已尝试将 SELECT 2:540 作为 temp_column。请不要笑大声笑我正在努力变得更流利;)

我怀疑这可以通过 UPDATE 命令来完成,但就像我说的那样,我想追求这个解决方案,为我的工具库添加更多使用 MYSQL 的工具。

【问题讨论】:

    标签: mysql select auto-increment temporary


    【解决方案1】:

    如果您的表(有 535 名玩家)的值不在 1 到 539 之间,并且没有使用外键回复到其他表,您可以尝试使用 var 和 update

      set @myid:=0;
    
      update 
        nba_players
        set player_id =@myid:=@myid+1
        order by player_id; 
    

    否则,您可以在有效范围内(例如:@myid= 10000)执行相同的操作以将 id 移出范围,然后重复命令形式 0

    【讨论】:

    • 更新语句很好用。我第一次使用 set @myid:=0;语句,我认为它的意思是从 id 0 开始。但是,您能否回答问题的一部分,即使用 SELECT 语句创建一个临时列,其中的值按升序排列到第 N 个值?我曾尝试在网上寻找该答案,但我的问题似乎没有产生可以给我答案的结果集。干杯!
    • @Dojo 您可以根据自己的喜好调整解决方案..(概念仍然存在)如果我的回答是正确的,请将其标记为已接受...(过去 15 分钟)在这里查看meta.stackexchange.com/questions/5234/…
    【解决方案2】:

    关于如何在 MySQL 中创建一个具有一列递归值从 1 到 540 的临时表的问题是使用递归 CTE 或递归通用表表达式。具体查询如下:

    使用递归 cte_count (n) 作为 ( 选择 1 联合所有 选择 n + 1 从 cte_count 其中 n

    现在也许有一个更新语句可以将结果添加到 player_id 列中。如果我找到该解决方案,我将在此处发布。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-04-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多