LINUX.ORG.RU

MySql объединить таблицы и если ИД отсутствует в приемнике то создать и скопировать из источника

 


0

1

Есть таблицы А и B Названия полей в таблицах разное. Но допустим поле A.pk_id = B.fk_id Надо скопировать A.contact_phone в B.phone

Я это сделал при помощи
UPDATE oc_B JOIN oc_A ON oc_B.fk_id = oc_A.pk_i_id …

И все отлично! Но в A допустим 100 записей, в B только 50 Тогда A.pk_id = 51, 52 … Не скопировались так как в B не создались новые записи 51, 52 …

Как это сделать?

★★
Ответ на: комментарий от no-such-file

ON DUPLICATE KEY

Смущает ON DUPLICATE KEY так как не идет речь о дублировании. Просто в B отсутствует строка

Может быть вставить недостающее?

Можно. Но так некросиво)

mirek ★★
() автор топика
Последнее исправление: mirek (всего исправлений: 1)
Ответ на: комментарий от mirek

Смущает ON DUPLICATE KEY так как не идет речь о дублировании

При чём тут дублирование? Речь про конфликт если строка уже скопирована. Можно игнорировать, можно обновлять, на твоё усмотрение. Если конфликта нет, то происходит просто вставка.

no-such-file ★★★★★
()
Последнее исправление: no-such-file (всего исправлений: 1)
Ответ на: комментарий от mirek

Insert into B … Select … from A Where A.pk_id not in (Select B.fk_id from B)

На таблицах с большим количеством записей так делать не стоит, но на сотнях - единицах тысяч будет работать удовлетворительно.

cobold ★★★★★
()