现在我在PhpMyAdmin中尝试此查询以使用值形式wp_posts更新wp_postmeta:
UPDATE wp_postmeta
SET meta_value = (SELECT DISTINCT id FROM wp_posts)
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' )
但是给了我那个错误:#1054 - 'where子句'中的未知列'wp_posts.post_type'!
我试图改变它而没有任何好处,任何人都可以提供帮助吗?
答案 0 :(得分:1)
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在同一组parens中引用,并且在语法上是正确的。因为这可能不会给你你想要的东西,试试这个:
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上的id。
注意#2:正如OMG小马所说......
SET meta_value = (SELECT DISTINCT id FROM wp_posts)
此行最有可能会因返回多个值(仅预期为1)而引发错误。请注意,我在上面添加了“WHERE [某些条件]”。您需要在此处添加自己的WHERE子句。它应该是将子查询结果限制为只有一个结果的东西。
答案 1 :(得分:0)
您应该在右侧括号中移动:
(SELECT DISTINCT id FROM wp_posts)
到声明的最后。