【问题标题】:WHERE and AND clause not return valuesWHERE 和 AND 子句不返回值
【发布时间】:2018-04-15 01:14:36
【问题描述】:

我有这个 PostgreSQL SQL 查询,用于从由 INNER JOIN 连接的 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;

如果我在 wheres.active = true 中排除我会得到一些结果,但是当包含它时它不会返回任何内容。

在表格自拍中,我有 4 行有效的 true 和一个有效的 false 值。

解决方案是left join on likes 表。

【问题讨论】:

  • 显然,没有一行包含所有三个值。我建议您提供示例数据(简化)和所需的结果。
  • 是的,你是对的,喜欢表中缺少值,如果在 l.selfy_id = s.id 上使用左连接喜欢 l,那么它的返回值。谢谢!
  • 顺便说一句,您不需要CASE 来处理空值。 COUNT() 不计算 null 所以将返回 0。另外 count(s.id)=NULL 是错误的,你不能使用等于运算符与 NULL 进行比较。你需要我们 IS 就像 SomeValue IS NULL ... 但正如我已经说过的 COUNT() 永远不会返回 null
  • 好的,谢谢,我会更新的。

标签: sql postgresql where-clause


【解决方案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 是正确的。

【讨论】:

  • 你就是男人! distinct s.id 解决了我的另一个问题!非常感谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-02-02
  • 1970-01-01
  • 2014-09-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多