在 where 子句中使用子查询列

Jun*_*ooq 4 postgresql

这个问题已经被问过几次,甚至也得到了回答,但这对我没有帮助,这就是为什么我再次发布它。我有这个查询:

select u.*,l.*, 
(
    select count(cr.id) 
    from cloud_recordings cr 
    left join cameras c 
        on c.owner_id=u.id 
    where c.id=cr.camera_id
) valid_licence
from users u 
left join licences l 
    on l.user_id=u.id;
Run Code Online (Sandbox Code Playgroud)

它工作正常,但是当我在最后放一个 where 子句时:

select u.*,l.*, 
(
    select count(cr.id) 
    from cloud_recordings cr 
    left join cameras c 
        on c.owner_id=u.id 
    where c.id=cr.camera_id
) valid_licence
from users u 
left join licences l 
    on l.user_id=u.id
where valid_licence > 0;
Run Code Online (Sandbox Code Playgroud)

它只是给了我一个错误:

错误:“valid_licence”列不存在第
4 行:在 l.user_id=u.id 上留下加入许可 l,其中 valid_licence >..

a_h*_*ame 5

您不能在定义别名的同一“级别”上引用别名。您需要将基本查询包装到派生表中:

select *
from (
  select u.*,
         l.*, 
         (select count(cr.id) from cloud_recordings cr left join cameras c on c.owner_id=u.id where c.id=cr.camera_id) valid_licence
  from users u 
    left join licences l on l.user_id=u.id 
) t
where valid_licence > 0;
Run Code Online (Sandbox Code Playgroud)