我正在尝试对 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"
)
我得到的错误是:
每个派生表必须有自己的别名。
据我所知,我在选择查询中的所有内容上都使用了别名,所以我一定是错过了一些小东西。我查找了其他一些类似的问题,但没有一个答案涉及嵌套在更新查询中的选择查询,因此它们没有太大帮助。
任何帮助将不胜感激。谢谢!
最佳答案
你的逻辑有点难以理解。但是,您应该通过 update
中的 join
来执行此操作。像这样的事情:
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';
关于MySQL - 使用所选内容更新行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37106888/