arthur.sw Asked: 2021-01-15 06:44:42 +0800 CST2021-01-15 06:44:42 +0800 CST 2021-01-15 06:44:42 +0800 CST 在 MySQL 中为子查询使用别名时,“where 子句”中的未知列 772 这个简单的查询: select exam.id as exam_id, (select count(*) from dataset where dataset.id = exam.id) as n_dataset from exam where n_dataset = 0 返回以下错误: ERROR 1054 (42S22) at line 1: Unknown column 'n_dataset' in 'where clause' 为什么? mysql where 2 个回答 Voted Best Answer J.D. 2021-01-15T07:05:25+08:002021-01-15T07:05:25+08:00 因为子句的操作顺序首先应用在运算符之前。所以在应用该子句时还不存在。WHERESELECTn_datasetWHERE 您需要将其COUNT()用作窗口函数(取决于 MySQL 的版本,您应该更新标签以包含版本)以获得您正在寻找的结果。 或者,您可以COUNT()先在 CTE 中创建查询,然后再重新加入您的表。 但是进一步解释您的逻辑,听起来您的实际最终目标是获得所有exams没有任何相关性的东西datasets。您可以通过以下方式更简单地完成LEFT JOIN此操作: select distinct exam.id as exam_id, 0 as n_dataset from exam left join dataset on exam.id = dataset.id where dataset.id is null nbk 2021-01-15T08:01:52+08:002021-01-15T08:01:52+08:00 您可以在 MySQL 中简单地使用 HAVING CREATE TABLE exam ( id int) CREATE TABLE dataset ( id int) select exam.id as exam_id, (select count(*) from dataset where dataset.id = exam.id) as n_dataset from exam HAVING n_dataset = 0 考试编号 | n_dataset ------: | --------: db<>在这里摆弄
因为子句的操作顺序首先应用在运算符之前。所以在应用该子句时还不存在。
WHERE
SELECT
n_dataset
WHERE
您需要将其
COUNT()
用作窗口函数(取决于 MySQL 的版本,您应该更新标签以包含版本)以获得您正在寻找的结果。或者,您可以
COUNT()
先在 CTE 中创建查询,然后再重新加入您的表。但是进一步解释您的逻辑,听起来您的实际最终目标是获得所有
exams
没有任何相关性的东西datasets
。您可以通过以下方式更简单地完成LEFT JOIN
此操作:您可以在 MySQL 中简单地使用 HAVING
db<>在这里摆弄