您的問題比您想象的更復雜。沒有什麼可以加入的。因此,要麼編寫一個存儲過程,它使用一個遊標循環遍歷兩個表並逐行更新現有的表(這可能很快就會成爲性能噩夢,因此我不推薦它),或者使用這個有點複雜的查詢:
CREATE TABLE temp
(id int auto_increment primary key, `new_column` int)
;
INSERT INTO temp
(`new_column`)
VALUES
(1000),
(1001),
(1002),
(1003)
;
CREATE TABLE existing
(`old_column_1` int, `old_column_2` int, `new_column` varchar(4))
;
INSERT INTO existing
(`old_column_1`, `old_column_2`, `new_column`)
VALUES
(1, 100, NULL),
(2, 101, NULL),
(3, 102, NULL)
;
update
existing e
inner join (
select * from (
select
t.*
from temp t
)t
inner join
(
select
e.old_column_1, e.old_column_2,
@rownum := @rownum + 1 as rn
from existing e
, (select @rownum:=0) vars
)e on t.id = e.rn
) sq on sq.old_column_1 = e.old_column_1 and sq.old_column_2 = e.old_column_2
set e.new_column = sq.new_column;
帶電作業我在你的臨時表中增加了一個AUTO_INCREMENT列。要麼你做這種方式,或者你模擬ROWNUMBER像我一樣在這裏:
select
e.old_column_1, e.old_column_2,
@rownum := @rownum + 1 as rn
from existing e
, (select @rownum:=0) vars
如果你想影響哪一行獲得該行號,你可以在那裏使用ORDER BY whatever_column ASC|DESC
。
那麼,究竟該查詢基本上沒有,就是要在現有表中創建一個行號,並通過此列,並在臨時表AUTO_INCREMENT列加入。然後,我再次將此子查詢加入到現有表中,以便我們可以輕鬆地將臨時表中的列複製到現有表中。
請解釋其從臨時表中的值應該在舊錶被分配給哪一行?爲什麼查詢使用'min'功能? – krokodilko