gpt4 book ai didi

sql - WHERE 和 AND 子句不返回值

转载 作者:行者123 更新时间:2023-11-29 13:15:28 25 4
gpt4 key购买 nike

我有这个 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;

如果我在 where block 中排除 s.active = true 我会得到一些结果,但是当包含它时它不会返回任何东西。

在表格自拍照中,我有 4 行具有有效的 true 值,1 行具有有效的 false 值。

解决方案是 left join on likes 表。

最佳答案

这对于评论来说太长了,而且与所问的问题无关(这显然是使用 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 是正确的。

关于sql - WHERE 和 AND 子句不返回值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49833198/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com