Mysql WHERE子句中的一些错误

Mysql WHERE子句中的一些错误,mysql,sql,wordpress,phpmyadmin,mysql-error-1054,Mysql,Sql,Wordpress,Phpmyadmin,Mysql Error 1054,现在,我在PhpMyAdmin中尝试此查询,以使用值形式wp_posts更新wp_posttea: 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 (

现在,我在PhpMyAdmin中尝试此查询,以使用值形式wp_posts更新wp_posttea:

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'


我试图在没有任何好处的情况下更改它,任何人都可以帮助吗?

您应该将右括号移到:

(SELECT DISTINCT id FROM wp_posts)

到语句末尾。

您应该将右括号移到:

(SELECT DISTINCT id FROM wp_posts)
AND (wp_posts.post_type='attachment') 
直到陈述的结尾

AND (wp_posts.post_type='attachment') 
我认为这里真正的问题是,您引用wp_帖子的唯一地方是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在同一组paren中引用,并且在语法上是正确的。由于这可能无法满足您的需求,请尝试以下方法:

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#u posteta表有一个post#u id字段,该字段对应于wp#u posts上的id

注#2:如OMG小马所述

SET meta_value = (SELECT DISTINCT id FROM wp_posts) 
此行很可能会抛出一个错误,返回多个值,其中预期只有1个值。注意,我在上面添加了一个“WHERE[某些条件]”。您需要在此处添加自己的WHERE子句。它应该限制子查询结果仅为一个结果

我认为这里真正的问题是,您引用wp_帖子的唯一地方是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在同一组paren中引用,并且在语法上是正确的。由于这可能无法满足您的需求,请尝试以下方法:

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#u posteta表有一个post#u id字段,该字段对应于wp#u posts上的id

注#2:如OMG小马所述

SET meta_value = (SELECT DISTINCT id FROM wp_posts) 

此行很可能会抛出一个错误,返回多个值,其中预期只有1个值。注意,我在上面添加了一个“WHERE[某些条件]”。您需要在此处添加自己的WHERE子句。而且它应该将子查询结果限制为只有一个结果。

现在有什么错误?你能提供一些关于你的wp_帖子和wp_postETA表的信息吗?现在有什么错误?你能提供一些关于wp_posts和wp_Posteta表的列的信息吗?修复1054错误后,meta_值=将出错,因为子查询可以返回多行。修复1054错误后,meta_值=将出错,因为子查询可以返回多行。你走对了,但是查询需要连接到wp_posts您走在正确的轨道上,但是查询需要连接到wp_posts