我有两张桌子:
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`
但它不起作用。我该怎么做呢?
答案 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.id
为unique
或primary key
):
INSERT INTO blog_export (id, body)
SELECT entity_id, body_value
FROM field_data_body
ON DUPLICATE KEY UPDATE body=body_value;