WHERE子句中的一些错误

时间:2012-04-07 14:29:48

标签: mysql sql wordpress phpmyadmin mysql-error-1054

现在我在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'!

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

2 个答案:

答案 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)

到声明的最后。