WHERE 子句中的一些错误

Posted

技术标签:

【中文标题】WHERE 子句中的一些错误【英文标题】:some error in WHERE clause 【发布时间】:2012-04-20 18:26:52 【问题描述】:

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

我尝试更改它没有任何好处,有人可以帮忙吗?

【问题讨论】:

修复 1054 错误后,这将在 meta_value = 上出错,因为子查询可以返回多行。 【参考方案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 子句。并且应该将子查询结果限制为一个结果。

【讨论】:

你在正确的轨道上,但查询需要加入 wp_posts【参考方案2】:

你应该把右括号移到:

(SELECT DISTINCT id FROM wp_posts)

到语句的结尾。

【讨论】:

现在的错误是什么?你能提供一些关于你的 wp_posts 和 wp_postmeta 表的列的信息吗?

以上是关于WHERE 子句中的一些错误的主要内容,如果未能解决你的问题,请参考以下文章

在 where 子句问题中的 Oracle 日期比较

错误代码:1054 'where 子句'中的未知列'billId'

查询中的错误 (1054):“where 子句”中的未知列“TableValue”

错误代码:1054。“where 子句”中的未知列“sdate”

左连接的where子句中的Mysql查询错误

where 子句中的列“id”不明确