现在我在 PhpMyAdmin 中尝试这个查询来更新 wp_postmeta 的值形式 wp_posts:
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 clause' 中的未知列 'wp_posts.post_type' !
我试图改变它但没有任何好处,任何人都可以帮忙吗?
最佳答案
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 上的 id。
注意#2:正如 OMG Ponies 所说...
SET meta_value = (SELECT DISTINCT id FROM wp_posts)
这一行很可能会抛出一个错误,因为返回多个值,而预期只有 1 个值。请注意,我在上面添加了“WHERE [某些条件]”。您需要在此处添加自己的 WHERE 子句。并且它应该是将子查询结果限制为只有一个结果的东西。
关于mysql - WHERE 子句中的一些错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10055295/