【发布时间】:2011-08-10 19:00:56
【问题描述】:
基本问题是 - 我试图在我的 WHERE CASE 语句中使用子查询的计数作为变量,但它似乎不允许我使用它。当我将 SELECT COUNT(id)... 语句放在 WHERE 区域时,我已经让它有点工作了,但是 - 如果我这样做,我将不得不包含它 3-4 次不同的时间,而不是只包含一次可以放在SELECT里面。
下面是一个修改后的示例查询,它解释了我的问题。这不是我使用的确切查询,但它给出了与我更长/更复杂的查询相同的错误:
错误:
[Err] 1054 - 'where 子句'中的未知列'matched_sections'
查询:
SELECT
articles.id,
(SELECT COUNT(id) FROM site_areas_site_sections WHERE
site_areas_site_sections.site_area_id = 8) AS matched_sections
FROM
articles
LEFT JOIN
articles_site_sections ON articles_site_sections.article_id = articles.id
LEFT JOIN
site_areas_site_sections ON articles_site_sections.site_section_id =
site_areas_site_sections.site_section_id
WHERE
(CASE
WHEN
matched_sections > 0
THEN
site_sections.id = site_areas_site_sub_sections.site_sub_section_id
END
)
【问题讨论】:
-
除了不存在(在评估 WHERE 子句时)
matched_section列之外,您的 CASE 表达式似乎还有另一个问题。它引用了一个在 FROM 子句中找不到的表 (site_areas_site_sub_sections)。 -
@Andriy M,上面的 sql 是“解释我的问题的修改示例查询”,他可能只是忘记添加/排除其他必要的位。