gpt4 book ai didi

sql - NOT EXIST in correlated subquery 返回太多行

转载 作者:行者123 更新时间:2023-11-29 12:18:24 27 4
gpt4 key购买 nike

我想选择 N 个条件匹配关联表的记录。

我目前正在尝试这样完成

select v.id, name
from visitors v
left join trackings t on t.visitor_id = v.id
where
v.app_id = 'A0I'
and (
(NOT EXISTS (
SELECT v.id
FROM trackings not_t
WHERE v.id = not_t.visitor_id and field = 'admin'
))
or (t.field = 'app_name' and t.string_value ILIKE 'gitchecker')
or (t.field = 'users_created' and t.integer_value > 0)
)
group by v.id
having count(*) = 3 -- <number of conditions>

这很好用,除非我尝试通过 NOT EXISTS 子查询来表达“未知”条件。此子查询返回太多行,因为它似乎未在 v.id = not_t.visitor_id

上过滤

有什么想法吗?

最佳答案

我不确定为什么您的版本不起作用。它可能是 HAVING 子句,它应该是 2 或 3,具体取决于匹配项。

但是,为什么不这样表述逻辑呢?

select v.id, name
from visitors v join
trackings t
on t.visitor_id = v.id
where v.app_id = 'A0I'
group by v.id, name
having sum( (t.field = 'app_name' and t.string_value ILIKE 'gitchecker')::int) > 0) and
sum( (t.field = 'users_created' and t.integer_value > 0)::int) > 0 and
sum( (t.field = 'admin')::int) = 0;

请注意,left join 是不必要的,因为您的条件需要匹配。

我发现对于这些类型的查询 -- set-with-in-set 查询 -- group byhaving 是表达大多数条件的最通用的方式.

关于sql - NOT EXIST in correlated subquery 返回太多行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40532683/

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