使用ON DUPLICATE KEY UPDATE在表上执行带有子SELECT的INSERT INTO表

时间:2009-07-20 17:59:23

标签: mysql

我有一个表,tableA我想要求助,然后将每个结果行插入/更新到tableB中。目前我有这样的事情:

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中删除,因为该表可能包含数十万行。因此,我想使用ON DUPLICATE KEY UPDATE,因为每个id列都设置为PRIMARY KEY。我已经尝试了以下各种版本(移动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 个答案:

答案 0 :(得分:1)

为什么不为此目的使用视图?

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

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

MySQL documentation