MySQL需要使用SELECT INTO自动递增的非主键

时间:2013-11-11 13:59:04

标签: mysql

我有名字的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中的数据被更改了。这是应该的。

1 个答案:

答案 0 :(得分:0)

如果我理解你的问题,你需要像

这样的东西
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)