【问题标题】:some error in WHERE clauseWHERE 子句中的一些错误
【发布时间】: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 = 上出错,因为子查询可以返回多行。

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


【解决方案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 表的列的信息吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-09-18
相关资源
最近更新 更多