Как установить уникальные значения в нескольких строках при выполнении UPDATE в MySQL - PullRequest
1 голос
/ 03 октября 2019

У меня есть таблица с несколькими столбцами. Единственный способ определить соединение с каждой строкой - с помощью session_id
Моя цель - обновить столбец age случайным числом.
Поэтому я использовал следующий запрос

UPDATE userdata
SET age = (FLOOR(18 + RAND() * 62))
WHERE session_id IN 
(
    SELECT session_id FROM
    (
        SELECT DISTINCT session_id
        FROM userdata
    ) AS temp
)

Это работает нормально, но каждый отдельный идентификатор сеанса по-прежнему имеет несколько строк, а возраст имеет разные значения. Я знаю, что этот запрос делает то, что должен, но как я могу изменить свойзапросить, чтобы получить уникальные значения возраста для каждой строки с одинаковым идентификатором session_id?

например,

session_id  |  age
1              25
2              35
2              35
3              51
3              51
3              51

Заранее спасибо и, пожалуйста, будьте любезны, так как это мой первый вопрос stackoverflow.

Ответы [ 2 ]

1 голос
/ 03 октября 2019

Попробуйте это:

update userdata
inner join (select *, (FLOOR(18 + RAND() * 62)) as age2 from userdata group by session_id) T ON T.session_id = userdata.session_id
set userdata.age = T.age2
0 голосов
/ 03 октября 2019

Это кажется неправильным. Кажется, session_id не является уникальным (когда, возможно, так и должно быть? - где это первый способ исправить это) ... поэтому вы пытаетесь создать уникальный столбец на его основе ... но, как вы правильно заметили,но вы не можете создать новый номер на основе идентификатора сеанса, так как он тоже будет таким же. Наиболее очевидное решение - добавить столбец с автоинкрементом:

ALTER TABLE yourtablename add Age int (11) PRIMARY KEY AUTO_INCREMENT;

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...