Sql WHERE and子句不返回值

Sql WHERE and子句不返回值,sql,postgresql,where-clause,Sql,Postgresql,Where Clause,我有一个PostgreSQL查询,用于从由内部联接连接的4个表中选择几个值,并且我在返回值时遇到问题 Select u.id,u.name,u.image,u.created_at as member_from, p.referral, p.note, CASE WHEN count(l.selfy_id)=NULL THEN '0' ELSE count(l.selfy_id) END as likes_total, CASE WHEN count

我有一个PostgreSQL查询,用于从由内部联接连接的4个表中选择几个值,并且我在返回值时遇到问题

Select u.id,u.name,u.image,u.created_at as member_from, 
       p.referral, p.note, 
       CASE WHEN count(l.selfy_id)=NULL THEN '0' ELSE count(l.selfy_id) END as likes_total,
       CASE WHEN count(s.id)=NULL THEN '0' ELSE count(s.id) END as selfies_total 
from users as u
inner join profiles  p on p.user_id = u.id
inner join selfies  s on s.user_id = u.id
inner join likes  l on l.selfy_id = s.id
where (u.active = true and s.active = true and u.id= 2 )
group by u.id,u.name,u.image,member_from,p.referral,p.note;
如果我在
where
block
s.active=true
中排除,我会得到一些结果,但当包含时,它不会返回任何结果

在自拍表中,我有4行具有活动真值,一行具有活动假值


解决方案是在likes表中使用左连接。

这对于注释来说太长,并且与所问问题无关(显然是使用
左连接解决的)

COUNT()
从不返回
NULL
值。而
CASE
表达式只返回单一类型的单个值。而且,基本上所有与
NULL
的比较都返回
NULL
,这被视为FALSE。鉴于这些事实,你能说出这个表达有三个错误吗

   CASE WHEN count(l.selfy_id)=NULL THEN '0' ELSE count(l.selfy_id) END as likes_total,
您可以将
选择
公式化为:

Select u.id, u.name, u.image, u.created_at as member_from, 
       p.referral, p.note, 
       count(l.selfy_id) as likes_total, count(s.id) as selfies_total 
现在,它们将返回完全相同的值,因为
COUNT()
计算非空值,
COUNT()
的两个参数都用于
JOIN
条件中,所以决不
NULL

我推测你真的打算:

Select u.id, u.name, u.image, u.created_at as member_from, 
       p.referral, p.note, 
       count(distinct l.selfy_id) as likes_total,
       count(distinct s.id) as selfies_total 

虽然我不能100%确定这些ID是正确的。

显然,没有一行具有所有三个值。我建议您提供示例数据(简化)和所需结果。是的,您是正确的,likes表中缺少值,如果在l.selfy_id=s.id上使用left join likes l,则返回值。非常感谢。顺便说一句,您不需要
CASE
来处理空值
COUNT()
不计算null,因此将返回0。另外,
count(s.id)=NULL
是错误的,您不能使用相等运算符与NULL进行比较。你需要告诉我们
就像
某个值是空的
。。。但是正如我已经说过的那样,
COUNT()!独特的s.id解决了我的另一个问题!非常感谢你!