Mysql

在 MySQL 中為子查詢使用別名時,“where 子句”中的未知列

  • January 14, 2021

這個簡單的查詢:

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

引用自:https://dba.stackexchange.com/questions/283250