gpt4 book ai didi

sql - 使用 coalesce 改进 postgres 子查询

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

想象一下:两个表,cases 和 case_messages。一个案例可以有任意数量的消息,也可以没有。这些消息之一可能是案例的最终答案。我现在想返回一个带有 bool 列的案例列表,告诉我是否有最终答案。如果一个案例根本没有消息,查询应该返回“false”。仅当 case_messages 中至少有一条相关消息(其中 isfinalanswer = true)时,查询才应返回 true。我设法通过 coalesce 和子查询来实现它,但感觉 super 难看:

SELECT cases.id, cases.title,
COALESCE((SELECT isfinalanswer FROM case_messages WHERE caseid = cases.id ORDER BY isfinalanswer DESC LIMIT 1), false) AS hasfinalanswer,
FROM cases;

我该如何改进?

最佳答案

我建议使用 exists:

SELECT c.id, c.title,
(exists (SELECT 1 FROM case_messages cm WHERE cm.caseid = c.id and isfinalanswer = true)
) as hasfinalanswer
FROM cases c;

不知道大家会不会觉得这样不那么丑。

我应该补充一点,为了性能(问题中未提及),您需要在 case_messages(caseid, isfinalanswer) 上建立索引。有了这样的索引,这可能是性能最高的解决方案。

关于sql - 使用 coalesce 改进 postgres 子查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26098865/

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