MySQL - 使用所选内容更新行

时间:2016-05-09 02:10:23

标签: mysql sql wordpress sql-update

我正在尝试对MySQL数据库中的某些列进行批量更新。这是一个WordPress / WooCommerce网站,因此其中一些列可能看起来很熟悉。

基本上我要做的就是从wp_posts表中的post_content列中获取内容,将其与帖子ID的元值'_sku'连接起来,然后重新更新一些post_content字段。

我想我很亲密。我有选择查询工作正常,但现在我只是尝试将其包装在更新查询中。这就是我所拥有的:

UPDATE wp_posts as wp
SET
wp.post_content =
(
    SELECT concat(wp2.post_content,' (SKU:',wpmeta.meta_value,')') as new_content FROM (SELECT * FROM `wp_posts` as wp2) INNER JOIN `wp_postmeta` as wpmeta ON wp2.ID=wpmeta.post_id WHERE wp2.post_type = 'product' AND wpmeta.meta_key = "_sku"
)

我得到的错误是:

Every derived table must have its own alias.

就我所知,我在select查询中的所有内容上都使用了别名,所以我必须错过一些小的东西。我查找了一些其他类似的问题,但没有一个答案涉及嵌套在更新查询中的选择查询,因此它们没有多大帮助。

非常感谢任何帮助。谢谢!

1 个答案:

答案 0 :(得分:1)

你的逻辑有点难以理解。但是,您应该使用join中的update执行此操作。像这样:

UPDATE wp_posts wp JOIN
       wp_postmeta pm
       ON wp.id = pm.post_id AND pm.meta_key = '_sku'
    SET wp.post_content = CONCAT(wp.post_content, ' (SKU:', pm.meta_value, ')')
    WHERE wp.post_type = 'product';