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 子句中的一些错误的主要内容,如果未能解决你的问题,请参考以下文章
错误代码:1054 'where 子句'中的未知列'billId'
查询中的错误 (1054):“where 子句”中的未知列“TableValue”