AND (wp_posts.post_type='attachment')
我认为这里真正的问题是,您引用 wp_posts 的唯一位置是在您的 EXISTS 和 SET 子查询中。WHERE 子句的那部分(上面引用)超出了您的子查询的范围,并且不知道它。
除非您打算让您的 EXISTS 子查询看起来像这样:
(select 1
from wp_posts
join articles on wp_posts.post_name=articles.image
WHERE wp_posts.post_type='attachment')
在这种情况下, wp_posts 在同一组括号中引用并且在语法上是正确的。因为这可能不会给你你所追求的,试试这个:
UPDATE wp_postmeta
INNER JOIN wp_posts ON wp_posts.id = wp_postmeta.post_id
SET meta_value = (SELECT DISTINCT id FROM wp_posts WHERE [some condition])
WHERE EXISTS (select 1
from wp_posts
join articles on wp_posts.post_name=articles.image)
AND (wp_posts.post_type='attachment')
AND (wp_postmeta.meta_key='_thumbnail_id' )
注意#1:我假设您的 wp_postmeta 表具有对应于 wp_posts 上的 id 的 post_id 字段。
注意#2:正如 OMG Ponies 所说...
SET meta_value = (SELECT DISTINCT id FROM wp_posts)
此行很可能会在返回多个值时抛出错误,而这些值只需要 1。请注意,我在上面添加了“WHERE [某些条件]”。您需要在此处添加自己的 WHERE 子句。它应该是将子查询结果限制为只有一个结果的东西。