代码之家  ›  专栏  ›  技术社区  ›  sberry

使用表B上的子选择(按重复键更新排序)向表A中插入

  •  0
  • sberry  · 技术社区  · 16 年前

    我有一个表,我想使用表a,然后将每个结果行插入/更新到表B中。目前我有这样的想法:

    delete from tableB;
    set @place = 0;
    INSERT INTO tableB (id, place, name, colD, colF) SELECT (id, greatest(@place := @place + 1, 0) from tableA order by colD desc;
    

    这是可行的,但我不想每次都从tableB中删除,因为该表可能包含数十万行。所以,我想在重复密钥更新中使用,因为每个id列都被设置为主键。我已经尝试了以下的各种版本(将ON-DUPLICATE-KEY-UPDATE子句移动)

    INSERT INTO tableB (id, place, name, colD, colF) SELECT (id, greatest(@place := @place + 1, 0) from tableA order by colD desc ON DUPLICATE KEY UPDATE tableB.place = @place, tableB.name = tableA.name, tableB.colD = tableA.colD, tableB.colF = tableA.colF;
    

    1 回复  |  直到 14 年前
        1
  •  1
  •   Bogdan Gusiev    16 年前

    为什么不为此使用视图?

    create view tableb as 
    SELECT (id, greatest(@place := @place + 1, 0) from tableA order by colD desc;
    

    这样会有较少的问题,因为它会自动更新。

    MySQL documentation