2009-07-20 32 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

相關問題