使用带有 Andomar 答案的子查询。将连接与更新和删除语句一起使用并不好。
它应该是这样的
UPDATE wp_postmeta m SET m.meta_value = (SELECT p.ID FROM wp_posts p, articles a
WHERE m.post_id=p.ID AND m.post_id = a.id AND a.image IS NOT NULL
AND p.post_type='attachment' AND p.post_name=a.image)
WHERE m.meta_key='_thumbnail_id'
先备份!我没有测试这个。
如果不起作用,请尝试执行选择查询(如果您可以选择它们)。如果它没有选择(并且可能不会),请检查与您的设计相对应的查询结构。
SELECT m.meta_value, (SELECT p.ID FROM wp_posts p, articles a
WHERE m.post_id=p.ID AND m.post_id = a.id AND a.image IS NOT NULL
AND p.post_type='attachment' AND p.post_name=a.image) AS pID
FROM wp_postmeta m
WHERE m.meta_key='_thumbnail_id'
也尝试你的第一个查询
SELECT m.meta_value, p.ID AS pID FROM wp_postmeta m
INNER JOIN articles a on (m.post_id = a.id)
INNER JOIN wp_posts p on (m.post_id = p.ID)
WHERE p.post_name=a.image
AND a.image IS NOT NULL
AND p.post_type='attachment'
AND m.meta_key='_thumbnail_id'
尝试使用/修改选择查询以找出问题。