根据表B(MySQL)

时间:2016-01-06 04:08:22

标签: mysql sorting

首先 - 感谢您提前寻找并寻求帮助,非常感谢!

基本上我需要从A~Z排序表A,列DESCRIPT,然后......

基于此类,然后更新表B,列PRINTORDER,以便最低排序值具有PRINTORDER = 1,最高排序值将具有PRINTORDER = 20,000

在数据子集中,最低的是18681&最高为18695.(实际表格范围为1到20,000)

唯一需要修改的数据是表B中的PRINTORDER。

以下是表A中的数据子集:

    INUM    DESCRIPT
    23151   Crayon Apron
    23152   Acrylic bunny acry153
    23153   Acrylic easter egg acry154
    23154   Acrylic posypot tulip acrye01a
    23155   Acrylic orn chick acrye02
    23156   Hat baby chick bge10151
    23157   Sipper baby chick bge10158
    23158   Grow chick ea10991
    23159   Nail crystals easter ea11052
    23160   Mug jelly bean em11681
    23161   Plush tumbleweed chick he10148

以下是表B中的数据子集:

    ID      INUM    PrintOrder
    142161  23151   18681
    144054  23161   18683
    145092  23159   18687
    145093  23160   18688
    145094  23152   18689
    145095  23153   18690
    145096  23155   18691
    145097  23154   18692
    145098  23158   18693
    145099  23156   18694
    145100  23157   18695

这是希望的结果:

    ID      INUM    PrintOrder
    142161  23151   18681
    144054  23161   18694
    145092  23159   18693
    145093  23160   18692
    145094  23152   18689
    145095  23153   18683
    145096  23155   18687
    145097  23154   18688
    145098  23158   18690
    145099  23156   18691
    145100  23157   18695

谢谢&新年快乐!

1 个答案:

答案 0 :(得分:0)

这可能有用。首先设置计数器(i),从1到20000(如果你有20000行)。 然后使用UPDATE ... JOIN ... ORDER BY模式按DESCRIPT排序,此时您可以将PrintOrder设置为序列号。 我希望它适合你。

set @i:=1;

UPDATE b b
   JOIN 
   (
   SELECT a.INUM, DESCRIPT
   FROM a AS a
   WHERE DESCRIPT <> ''
   ORDER BY DESCRIPT
) a
ON b.INUM = a.INUM
SET b.PrintOrder=@i:=@i+1;