Лучший способ MySQL переместить данные из таблицы в другую с помощью junction

#mysql

#mysql

Вопрос:

У меня есть таблица SQL под названием members

 | member_id | first_name | last_name | email                      | password | phone_number | country |
|-----------|------------|-----------|----------------------------|----------|--------------|---------|
| 1         | John       | Doe       | john.doe@rambo.vid         | 123456   | 654789159    | en_US   |
| 2         | Jules      | Ferry     | jules.ferry@politician.old | 456789   |              | fr_FR   |
  

Я хотел бы создать новую таблицу users и переместить данные с user_id в качестве junture следующим образом :

Пользователи

 | user_id | first_name | last_name | email                      | password |
|---------|------------|-----------|----------------------------|----------|
| 1       | John       | Doe       | john.doe@rambo.vid         | 123456   |
| 2       | Jules      | Ferry     | jules.ferry@politician.old | 456789   |
  

Участники

 | member_id | user_id | phone_number | country |
|-----------|---------|--------------|---------|
| 1         | 1       | 654789159    | en_US   |
| 2         | 2       |              | fr_FR   |
  

Каков наилучший способ (более эффективное выполнение) в MySQL для изменения существующей базы данных?

Комментарии:

1. Вы смотрели на INSERT INTO SELECT ? dev.mysql.com/doc/refman/8.0/en/insert-select.html

2. Да, но мне нужно после выполнить цикл для каждой строки данных и получить user_id и сохранить user_id в таблице members. Я не знаю, есть ли более простой способ только в одном запросе.

3. Не уверен, зачем вам нужно выполнять цикл. Можете ли вы объяснить другой способ? Почему это не может быть 2 инструкции insert?

4. Откуда вы берете user_id ? Это другая таблица? Вы можете присоединиться к ним, если это так. Вы можете запустить инструкцию Update после завершения вставки в таблицу users.

Ответ №1:

Вот о чем я думаю:

 INSERT INTO users ( user_id, member_id, first_name, last_name, email, password)
    SELECT <user_id>, -- Wherever this needs to come from or remove if its generated.
         member_id, first_name, last_name, email, password
    FROM members;
  

За которым следует:

 UPDATE members m INNER JOIN users u
    ON m.member_id = u.member_id 
    SET m.user_id = u.user_id
  

Я добавил поле member_id в таблицу users, которого у вас нет. Если у вас нет возможности сделать это, вы можете использовать другие идентификаторы для присоединения к таблице.

Комментарии:

1. Да, это кажется лучшим способом, но user_id есть auto_increment и я хотел бы получить его для каждой записи строки, чтобы сохранить его в users таблице без добавления member_id в эту таблицу. к сожалению, я думаю, мне понадобится php-код, чтобы выполнить цикл для разделения каждой строки записи.

2. Нет. Вам не нужно выполнять цикл, пока вы можете сопоставлять исходные данные и новые данные. Несколько общих ключей, которые вы можете обновить, используя новую таблицу.