Вы можете произвольно назначить идентификаторы контактов, используя переменные или row_number()
(в MySQL 8+):
select t1.id, tt1.contact_id
from (select t1.*, row_number() over (order by id) as seqnum
from table_1 t1
) t1 join
(select t1.*, row_number() over (order by rand()) as seqnum
from table_1 t1
) tt1
on t1.seqnum = tt1.seqnum;
Без особых затруднений (но с большим набором текста) это можно преобразовать для использования переменных в более ранних версиях.
Вы также можете включить это в оператор update
, если хотите перетасовать значения навсегда.
EDIT:
Я думаю, что вы хотите:
update table1 t1 join
(select t1.id, tt1.contact_id
from (select t1.*, (@rn1 := @rn1 + 1) as seqnum
from (select * table_1 order by id) t1 cross join
(select @rn1 := 0) params
) t1 join
(select t1.*, (@rn2 := @rn2 + 1) as seqnum
from (select * from table_1 order by rand()) t1 cross join
(select @rn2 := 0) params
) tt1
on t1.seqnum = tt1.seqnum
) tt1
on tt1.id = t1.id
set t1.contact_id = tt1.contact_id;