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 имеет POST_ID поле, которое соответствует идентификатору на wp_posts.
Примечание # 2: Как указано OMG Ponies ...
SET meta_value = (SELECT DISTINCT id FROM wp_posts)
Эта линия будет наиболее вероятно, выдаст ошибку для возвращения нескольких значений, где только 1, как ожидается. Обратите внимание, что я добавил «WHERE [some condition]» выше. Здесь вы захотите добавить свое предложение WHERE. И это должно быть то, что ограничивает результат подзапроса только одним результатом.
После исправления ошибки 1054 это приведет к ошибке в meta_value =, поскольку в подзапросе может возвращаться более одной строки. –
Что вы предлагаете? –