2009-07-20 53 views
0

我有一个表,tableA,我想诉诸然后插入/更新每个结果行到tableB。目前,我有这样的事情:做一个INSERT INTO tableB与子SELECT对tableB排序与ON DUPLICATE KEY UPDATE

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。我曾尝试以下(移动对重复密钥更新各地条款)的各种版本

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; 

没有运气,

如何做到这一点的任何指针?

+0

你是什么意思的度假村? RDB没有排序,您可以在您的选择查询中排序,并通过使用索引来支持 – txwikinger 2009-07-20 18:11:31

回答

1

为什么你不使用视图来达到这个目的?

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

这样可以减少问题,因为它会自动更新。

MySQL documentation

相关问题