WHERE和AND子句不返回值

时间:2018-04-14 15:41:42

标签: sql postgresql where-clause

我有这个PostgreSQL SQL查询,可以从INNER JOIN连接的4个表中选择几个值,而且我在返回值时遇到问题。

userthread

如果我在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中排除,我会得到一些结果但是在包含时它不会返回任何结果。

在表selfies中,我有4行,其中active为true,另一行为false值。

解决方案是s.active = true表。

1 个答案:

答案 0 :(得分:1)

这对于评论来说太长了,与被问到的问题无关(显然是使用left join解决的。)

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表示为:

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()计算非NULL值,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是正确的。