【问题标题】:Transfering data within a MySQL db from one table to another with sql statement使用 sql 语句将 MySQL 数据库中的数据从一个表传输到另一个表
【发布时间】:2010-12-04 08:17:38
【问题描述】:

由于关系是一对一的,因此我已将连接表与其相关实体合并。

所以现在原始的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
);

【问题讨论】:

  • 哈,哈-当然是“我的” sql :) - 顺便说一句。
  • “不开心”不是有效的 MySQL 错误消息。在这种情况下,这很明显(请参阅 Scrum Meister 的回答),但请记住,在以后的帖子中

标签: mysql insert-select


【解决方案1】:

只需删除 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;

--更新

由于您从 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;

下次请在您的问题中详细说明您要做什么。

【讨论】:

  • 意外结果! - 似乎我无法将这些字段(电话、手机、电子邮件、Skype)添加到现有记录(staff_ID)中 - 每次都使用新的 staff_ID 重复记录。有人知道为什么吗?
  • 每次运行查询时都会复制表。你想做什么???
  • @Jonathan Amend - 我可以看到我需要在哪里更清楚地解释我的要求。抱歉,我不会犯同样的错误两次。两种解决方案都可以正常工作。谢谢。
【解决方案2】:

你需要做一个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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-07-27
    • 1970-01-01
    • 2015-12-16
    • 1970-01-01
    • 1970-01-01
    • 2017-05-02
    • 1970-01-01
    相关资源
    最近更新 更多