Как я могу смешать данные столбца - PullRequest
0 голосов
/ 17 апреля 2019

У меня есть таблица table_1

 id     contact_id
 1         500
 5         89
 8         35
 15        458
 ...       ...
 555       38

, как я могу смешать contact_id, результат для table_1

id     contact_id
 1         35
 5         458
 8         35
 15        89
 ...       ...
 555       45

1 Ответ

1 голос
/ 17 апреля 2019

Вы можете произвольно назначить идентификаторы контактов, используя переменные или 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;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...