想象一下:有两个表,一个是cases,另一个是case_messages。一个case可以有任意多个或零个messages。这些messages中的一个可以成为case的最终答案。我现在想返回一个列出cases的列表,并且列出一个bool列告诉我是否有最终答案。如果对于一个case而言根本没有message,则查询应该返回"false"。只有在case_messages中至少有一个相关message,isfinalanswer=true时,查询才应该返回true。我通过使用coalesce和一个子查询来实现这个功能,但它看起来非常丑陋:
我该如何改善这个问题?
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
时,order by
是不必要的。 - Gordon LinoffORDER BY
使用了与SELECT
相同的列(isfinalanswer
)。顺便说一下,我没有收到这个通知 - 是偶然看到的。只有当我已经在这里发表评论时,它才会通知我。 - ypercubeᵀᴹ