我有一个要使用的表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;


没运气,

关于如何执行此操作的任何指示?

最佳答案

您为什么不为此使用视图?

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


这样一来,由于它将自动更新,因此问题较少。

MySQL documentation

关于mysql - 使用以ON DUPLICATE KEY UPDATE排序的表上的sub-SELECT进行INSERT INTO表,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1154979/

10-11 02:08
查看更多