Я объединил объединенную таблицу с ее связанной сущностью, поскольку это отношение было взаимно однозначным.
Итак, теперь в исходной таблице ww_staff
содержатся данные ww_contacts
.
Я написал следующий оператор, основанный на том, что я считаю логичным с точки зрения MySQL
но - его не доволен.
Может ли кто-нибудь увидеть подобное решение или явное нарушение?
INSERT INTO
ww_staff s
(phone, mobile, email, skype)
VALUES
(
SELECT w.phone, w.mobile, w.email, w.skype
FROM ww_contacts w
JOIN ww_staff s
ON s.staff_ID = w.contacts_ID
);
Вам нужно сделать оператор INSERT ... SELECT ... ON DUPLICATE KEY UPDATE
. Это добавит новые строки и обновит существующие:
INSERT INTO
ww_staff
(staff_ID, phone, mobile, email, skype)
SELECT w.contacts_ID, w.phone, w.mobile, w.email, w.skype
FROM ww_contacts w
JOIN ww_staff s
ON s.staff_ID = w.contacts_ID
ON DUPLICATE KEY UPDATE
ww_staff.phone = w.phone, ww_staff.mobile = w.mobile, ww_staff.email = w.email, ww_staff.skype = w.skype
Просто удалите значение VALUES()
INSERT INTO ww_staff s (phone, mobile, email, skype)
SELECT w.phone, w.mobile, w.email, w.skype FROM ww_contacts w
JOIN ww_staff s
ON s.staff_ID = w.contacts_ID;
- UPDATE
Поскольку вы выбираете из ww_contacts w JOIN ww_staff
- все записи уже есть - и вы не хотите вставлять дубликаты, используйте обновление с соединением:
UPDATE ww_staff s JOIN ww_contacts w ON s.staff_ID = w.contacts_ID
SET s.phone = w.phone, s.mobile = w.mobile, s.email = w.email, s.skype = w.skype;
В следующий раз, пожалуйста, объясните больше в своем вопросе, что вы пытаетесь сделать.