我正在尝试对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查询中的所有内容上都使用了别名,所以我必须错过一些小的东西。我查找了一些其他类似的问题,但没有一个答案涉及嵌套在更新查询中的选择查询,因此它们没有多大帮助。
非常感谢任何帮助。谢谢!
答案 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';