Копирование из таблицы в таблицу с сопоставлением записей по ID

Тема в разделе "Базы данных", создана пользователем jekadog, 9 сен 2020.

Модераторы: latteo
  1. jekadog

    jekadog

    Регистр.:
    14 дек 2012
    Сообщения:
    163
    Симпатии:
    56
    Приветствую всех!
    Ребят помогите пожалуйста.. нужна помощь..
    Есть одна БД, в ней есть 2 разных таблицы (tab_1 и tab_2), нужно с tab_1 копировать значения столбца 'PHONE_NUMBER' в tab_2 столбец 'WORK_PHONE'. При это всём копировать эти значения нужно сопоставляя пользователей по ID. Если есть запись в tab_1 и она имеет 'USER_ID' такой же как и в tab_2 'ID' то мы добавляем запись этому юзеру в tab_2 столбец 'WORK_PHONE'! Если в tab_1 отсутствует запись 'USER_ID' то в tab_2 столбец 'WORK_PHONE' ничего не пишем!
    Помогите построить правильно запрос и перенести всё это..
    За ранее благодарю!)

    tab_1
    Снимок экрана 2020-09-09 в 00.08.18.png

    tab_2
    Снимок экрана 2020-09-09 в 00.07.49.png
     
  2. Горбушка

    Горбушка Ищу её...

    Регистр.:
    2 май 2008
    Сообщения:
    3.427
    Симпатии:
    2.384
    Самое простое, что приходит в голову - создай третью таблицу и дальше наполни её результатом SELECT в эти 2:
    https://dev.mysql.com/doc/refman/8.0/en/insert-select.html

    Хотя есть различные возможности построить UPDATE FROM SELECT и т.д.
     
    jekadog нравится это.
  3. steelfeet

    steelfeet Создатель

    Регистр.:
    3 июн 2019
    Сообщения:
    25
    Симпатии:
    13
    Тупо скриптом сравнивать. Долго, но просто. LEFT JOIN tab_1 WHERE tab_1.ID <> tab_2.USER_ID и т.д.
     
    jekadog нравится это.
  4. jekadog

    jekadog

    Регистр.:
    14 дек 2012
    Сообщения:
    163
    Симпатии:
    56
    А можете Помочь построить полную инъекцию?

    Третья таблица мне точно не нужна.. там записей около 12К, да и что мне делать с третей таблицей? Потом опять сравнивать со второй..

    Очень не плохо, а можно по моему случаю сложить весь запросик этот?
     
    Последнее редактирование: 9 сен 2020
  5. steelfeet

    steelfeet Создатель

    Регистр.:
    3 июн 2019
    Сообщения:
    25
    Симпатии:
    13
    UPDATE tab_2
    SET WORK_PHONE = OT.PHONE_NUMBER
    FROM (
    SELECT ID, PHONE_NUMBER FROM tab_1 WHERE tab_1.ID = tab_2.USER_ID
    ) AS OT
    WHERE
    OT.ID = tab_2.USER_ID
     
    jekadog нравится это.
  6. Горбушка

    Горбушка Ищу её...

    Регистр.:
    2 май 2008
    Сообщения:
    3.427
    Симпатии:
    2.384
    В смысле? 3-я таблица = тот результат, что ты хочешь получить.
    Выполняешь перенос данных, 2-ю таблицу удаляешь, 3-ю переименовываешь во 2-ю. Профит

    12к записей - это ни о чём для БД сервера.
     
    jekadog нравится это.
  7. jekadog

    jekadog

    Регистр.:
    14 дек 2012
    Сообщения:
    163
    Симпатии:
    56
    Query 1 ERROR: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'FROM (
    SELECT ID, PHONE_NUMBER FROM `b_user_phone_auth` WHERE b_user_phone_auth.' at line 3
    ошибку пишет..(

    тут как бы соглашусь) но как это сделать то?..
     
  8. jekadog

    jekadog

    Регистр.:
    14 дек 2012
    Сообщения:
    163
    Симпатии:
    56
  9. flaer

    flaer Постоялец

    Регистр.:
    21 янв 2008
    Сообщения:
    51
    Симпатии:
    11
    Если решено - то будет здорово поделиться решением.
     
  10. steelfeet

    steelfeet Создатель

    Регистр.:
    3 июн 2019
    Сообщения:
    25
    Симпатии:
    13
    Это к заказчику.