gpt4 book ai didi

MySQL 'variable' 在 CASE 中不可用

转载 作者:行者123 更新时间:2023-11-29 07:06:28 25 4
gpt4 key购买 nike

基本问题是 - 我试图在我的 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
)

最佳答案

问题是当 MySQL 开始解析您的查询时,SELECT 子句是最后要分析的位。所以当它通过 WHERE 子句时,matched_sections 还不存在(因为 SELECT 子句还没有被查看。

快速浏览一下,您可以尝试这样的操作(尽管我认为有人能够想出更优雅的操作):

SELECT
articles.id,
matched_sections.count
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,
(SELECT COUNT(id) as count FROM site_areas_site_sections WHERE
site_areas_site_sections.site_area_id = 8) matched_sections
WHERE
(CASE
WHEN
matched_sections.count > 0
THEN
site_sections.id = site_areas_site_sub_sections.site_sub_section_id
END
)

关于MySQL 'variable' 在 CASE 中不可用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7016246/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com