【问题标题】:INSERT data from one table to another where ids match将数据从一个表插入到 id 匹配的另一个表
【发布时间】:2015-10-27 11:11:57
【问题描述】:

我有两张桌子:

1. `blog_export`: 'id', 'body'. 
'id' already has values 'body' is empty. 

2. `field_data_body`: 'body_value','entity_id' 

我想从field_data_body 复制body_value 并将该数据插入到表blog_export 上的“body”列中,但仅限于“id”与“entity_id”匹配的地方

我有声明

INSERT INTO `blog_export` (`body`)
SELECT `body_value`
FROM `field_data_body`
WHERE `bundle` = 'wp_blog' AND `entity_id` = `blog_export`.`id`

但它不起作用。我该怎么做呢?

【问题讨论】:

标签: mysql


【解决方案1】:

根据您当前使用表的情况,您至少有这两个选项。

1) blog_export 已经有所有记录的记录field_data_body 中可能有 entity_id 值。在这种情况下,您只需要更新所有记录,并且可以像其他人已经推荐的那样简单地使用更新语句(而不是插入)。

要么使用多表语法(就像在 Rahul 的回答中一样):

UPDATE blog_export be
JOIN field_data_body fdb ON fdb.entity_id = be.id
SET be.body = fdb.body_value;

或者单表语法:

UPDATE blog_export be
SET body = (SELECT body FROM field_data_body WHERE entity_id = be.id);

2) blog_export 不包含所有记录,在field_data_body 中可能有entity_id 值(即没有一个,或者可能只是其中的一个子集)。在这种情况下,您必须向表中插入新记录并更新已经存在的记录。

您可以使用带有ON DUPLICATE KEY UPDATE 子句的插入语句(假设blog_export.iduniqueprimary key):

INSERT INTO blog_export (id, body)
SELECT entity_id, body_value
FROM field_data_body
ON DUPLICATE KEY UPDATE body=body_value;

【讨论】:

    【解决方案2】:

    您需要执行UPDATE 操作,而不是加入其他表,例如

    UPDATE `blog_export` be
    JOIN `field_data_body` fdb ON fdb.`entity_id` = be.`id`
    SET be.`body` = fdb.`body_value`;
    

    【讨论】:

      猜你喜欢
      • 2021-10-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-18
      相关资源
      最近更新 更多