Перенос данных в базе данных MySQL из одной таблицы в другую с помощью оператора SQL - PullRequest
0 голосов
/ 04 декабря 2010

Я объединил объединенную таблицу со связанной с ней сущностью, поскольку отношения были один к одному.

Итак, теперь оригинальная таблица 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
);

Ответы [ 2 ]

2 голосов
/ 04 декабря 2010

Просто удалите ЗНАЧЕНИЯ ()

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 * 1004

Поскольку вы выбираете из 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;

В следующий раз, пожалуйста, объясните больше в своем вопросе, что вы пытаетесь сделать.

0 голосов
/ 04 декабря 2010

Вам нужно сделать заявление 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
...