MySQL未知列使用子查询

时间:2014-10-28 16:19:10

标签: mysql

执行此查询时收到错误:

SELECT 
    (SELECT count(cp_projeto_view.id) FROM cp_projeto_view WHERE cp_projeto_view.id_projeto = cp_projeto.id AND cp_projeto_view.id_pessoa = 467 LIMIT 1) AS qtde_visualizacoes
FROM cp_projeto
WHERE qtde_visualizacoes = 0

错误是:#1054 - 'where子句'中的未知列'qtde_visualizacoes'

为什么qtde_visualizacoes不存在?

非常感谢!

1 个答案:

答案 0 :(得分:0)

您不能在where子句中使用列别名(除非您使用子查询)。 MySQL有一个扩展,您可以使用having代替:

SELECT (SELECT count(cp_projeto_view.id)
        FROM cp_projeto_view
        WHERE cp_projeto_view.id_projeto = cp_projeto.id AND cp_projeto_view.id_pessoa = 467
        LIMIT 1
       ) AS qtde_visualizacoes
FROM cp_projeto
HAVING qtde_visualizacoes = 0

编辑:

您可能想要的查询更像是:

select p.*
from cp_projecto p
where not exists (select 1 from cp_projeto_view pv where pv.id_projeto = p.id and pv.id_pessoa = 467)

这将返回cp_projecto中没有匹配行的所有cp_projeto_view。您的原始查询只会返回一列0 s的行,这没有多大意义。如果你想要计数,那就做:

select count(*) as cnt
from cp_projecto p
where not exists (select 1 from cp_projeto_view pv where pv.id_projeto = p.id and pv.id_pessoa = 467)

并且,为了提高性能,请在cp_projeto_view(projeto, id_pessoa)上创建索引。