gpt4 book ai didi

sql - 使用第一个查询获取每个线程的第一个值,并使用该值执行第二个查询

转载 作者:行者123 更新时间:2023-11-29 14:24:51 26 4
gpt4 key购买 nike

我的第一个查询返回 thread_id,其中 is_root 为真

SELECT thread_id FROM event_comments WHERE e_id = 1 and is_root = true ORDER BY date_posted DESC

enter image description here

然后我如何使用 thread_id 从每个线程获取所有消息?

SELECT * FROM event_comments WHERE thread_id = 'ac7672dd-5465-42ca-a887-273f7641c972' ORDER BY date_posted
SELECT * FROM event_comments WHERE thread_id = '33da63a3-d324-4767-a294-75cdeaf478d8' ORDER BY date_posted

我不确定如何组合这两个查询来获得预期的输出

enter image description here

最佳答案

如果我没听错,您可以将 exists 与相关子查询一起使用:

select * 
from event_comments e
where exists (
select 1
from event_comments e1
where e1.e_id = 1 and e1.is_root = true and e1.thread_id = e.thread_id
)
order by thread_id, date_posted

existsin 更安全,因为它可以正确处理 null 值。 in 对于 null 是有技巧的:如果子查询返回的任何值是 null,那么所有记录都将在外部查询中匹配。


编辑

要按线程开始对结果进行排序,从具有最新消息的线程开始,然后按线程中消息的降序排列,您可以执行以下操作:

select * 
from event_comments e
where exists (
select 1
from event_comments e1
where e1.e_id = 1 and e1.is_root = true and e1.thread_id = e.thread_id
)
order by
max(date_posted) over(partition by thread_id),
date_posted desc

关于sql - 使用第一个查询获取每个线程的第一个值,并使用该值执行第二个查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59013286/

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