我有一組值(不連續)在表B(編號)需要隨機更新一列。但隨機值列舉
我需要用這些值隨機更新TableA列。
這個查詢會做我想要的嗎?
update TableA set column1 = (select id from TableB order by rand() limit 1)
這是正確的方法嗎?
我有一組值(不連續)在表B(編號)需要隨機更新一列。但隨機值列舉
我需要用這些值隨機更新TableA列。
這個查詢會做我想要的嗎?
update TableA set column1 = (select id from TableB order by rand() limit 1)
這是正確的方法嗎?
關於你提出的聲明:
update TableA set column1 = (select id from TableB order by rand() limit 1)
其行爲是有點不可預知的。我期望它只運行一次子查詢,然後用它提供的值更新TableA
的所有行,但顯然MySql 確實爲運行子查詢tableA
的每個記錄。
但是,您仍然會得到TableB
的一些值,這些值分配給TableA
的幾行。如果你不希望發生這種情況,它會變得更加複雜。
如果您TableA
具有獨特id
場,我建議這樣的:
update TableA
inner join (select id, @rnA := @rnA + 1 as rnA
from TableA,
(select @rnA := 0) init
) orderA
on TableA.id = orderA.id
inner join (select id, @rnB := @rnB + 1 as rnB
from (select * from TableB order by rand()) randB,
(select @rnB := 0) init
) orderB
on rnB = rnA
set TableA.column1 = orderB.id;
兩個子選擇orderA
和orderB
添加一個額外的列:rnA
和rnB
,這是從1開始順序編號。
連接條件要求這兩個值相等。這將使得一個記錄匹配來自TableA
的最多一條記錄。由於TableB
首先按隨機順序重新排序,結果將是你所期望的。
非常感謝@trincot –
不客氣。 – trincot
「TableA」的'Column1'中的當前值是什麼?我用目前的方法看到的問題是,您最終可能會使用相同的值兩次。 –
您當前的查詢會將'TableA'中所有行中的所有'column1'字段設置爲從'TableB'中隨機選擇的同一個'id'值。目前還不清楚這是否是你想要的 - 請澄清。 – Synchro
謝謝@Synchro我使用Mysql。所以它運行良好。它不填充相同的值。 –