1

现在我在 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 子句'中的未知列'wp_posts.post_type'!

我试图改变它而没有任何好处,有人可以帮忙吗?

4

2 回答 2

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 在同一组括号中引用并且在语法上是正确的。因为这可能不会给你你所追求的,试试这个:

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 子句。它应该是将子查询结果限制为只有一个结果的东西。

于 2012-04-07T14:38:11.113 回答
0

您应该将右括号移入:

(SELECT DISTINCT id FROM wp_posts)

到声明的结尾。

于 2012-04-07T14:33:30.433 回答