Esta simples consulta:
select exam.id as exam_id,
(select count(*) from dataset where dataset.id = exam.id) as n_dataset
from exam
where n_dataset = 0
retorna o seguinte erro:
ERROR 1054 (42S22) at line 1: Unknown column 'n_dataset' in 'where clause'
Por quê?
Porque a ordem das operações com a
WHERE
cláusula é aplicada primeiro antes doSELECT
operador. Portanton_dataset
, ainda não existe quando aWHERE
cláusula está sendo aplicada.Você precisaria usar
COUNT()
como uma função de janela (dependendo da versão do MySQL, você deve atualizar suas tags para incluir a versão) para obter os resultados que procura.Ou você pode criar sua
COUNT()
consulta em um CTE primeiro e, em seguida, juntar-se novamente à sua tabela mais tarde.Mas interpretando melhor sua lógica, parece que seu objetivo final real é obter tudo
exams
o que não tem nenhumdatasets
. Você pode fazer isso muito mais simplesLEFT JOIN
desta maneira:Você pode usar simplesmente HAVING no MySQL
db<>fique aqui