将数据从一个表插入另一个表,其中ID与

时间:2015-08-04 21:22:59

标签: mysql

我有两张桌子:

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

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

我想从body_value复制field_data_body并将该数据插入到列' body'在表格blog_export上,但仅限于{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`

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

2 个答案:

答案 0 :(得分:5)

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

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

答案 1 :(得分:1)

根据您目前的情况,您至少有这两个选项。

1)blog_export 已在entity_id中包含所有可能field_data_body值的记录的记录。在这种情况下,您只需更新所有记录,您就可以像其他人已经建议的那样使用更新语句(而不是插入)。

使用多表语法(就像在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 不包含entity_id中可能包含field_data_body值的所有记录(即,它们都不是,或者可能只是其中的一部分) )。在这种情况下,您必须向表中插入新记录并更新现有记录。

您可以使用带有ON DUPLICATE KEY UPDATE子句的insert语句(假设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;