Mysql
在 MySQL 中為子查詢使用別名時,“where 子句”中的未知列
這個簡單的查詢:
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'
為什麼?
因為子句的操作順序首先應用在運算符之前。所以在應用該子句時還不存在。
WHERE``SELECT``n_dataset``WHERE
您需要將其
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