繁体   English   中英

MySQL希望使用SELECT INTO自动递增的非主键

[英]MySQL want non-primary key that auto-increments with SELECT INTO

我有my_table的名字。 我想选择按名称排序的这些并将它们按此顺序插入到另一个表my_table2中。 My_table2具有一个“ display_order”字段,该字段应相对于名称顺序是连续的。

insert into my_table2(display_order, name)
select something_special(), name from my_table
order by name;

这样display_order是1,2,3 ..以下名称顺序。

是否可以通过一次选择(即不是循环)来实现:

  loop through my_table1 sorted by name:
      insert name, display_order into my_table2
      increment display_order 

是innodb

为什么我要这样:

my_table选择实际上要复杂得多,涉及各种用户搜索参数。 我希望能够一次执行此搜索,然后将结果保存到my_table 2中。因此,从my_table2中获取数据会更快,更容易。 而且,是的,我知道my_table2不会更新,因为my_table中的数据已更改。 那是应该的。

如果我正确理解了您的问题,那么您需要

insert into my_table2(display_order, name)
select @a:=@a+1, name 
from my_table
join (select @a :=0) b ON (1=1)
order by name;

要绝对确保变量按order by递增(我不记得mysql是否保证何时精确计算变量),您可能需要像这样重写它:

insert into my_table2(display_order, name)
select @a:=@a+1, a.name
from 
(
    select  name 
    from my_table
    order by name
 )a
 join (select @a :=0) b ON (1=1)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM