gpt4 book ai didi

sql - 使用 CASE 在两个表中查询 PostgreSQL

转载 作者:行者123 更新时间:2023-11-29 14:31:20 25 4
gpt4 key购买 nike

我有两个表 publicationspublication_likes,其中我有多对多的关系,这个字段:user_idpub_id , created_at.

用户有个人资料,他们在该个人资料上有出版物。当请求他的个人资料时,我需要获取特定用户的出版物(这很容易)。我还需要知道登录用户喜欢哪些出版物。

示例:user_a 是个人资料所有者并有出版物,user_b 已登录并访问 user_a 个人资料。服务器加载 user_a 发布并告诉 user_b 这些 user_a 发布中的哪个发布

问之前想了想,找到了解决办法,但不知道对不对

 SELECT p.id, 
p.user_id as creator,
p.p_content,
CASE WHEN pl.user_id = $1 THEN 1
ELSE 0
END as liked from publications p
LEFT JOIN publications_likes pl on p.id = pl.pub_id
WHERE p.user_id = $2;

请告诉我您认为这是否正确,以及是否有其他方法可以做到这一点。

注意:我知道标题不是很具体,但我想不出其他的。如果您可以做得更好,请放心去做。

最佳答案

编辑:更新以反射(reflect)评论中的澄清。

无需使用 CASE 语句即可获得正确的结果集。

 SELECT p.id, 
p.user_id as creator,
p.p_content,
pl.id IS NOT NULL AS liked
FROM publications p
LEFT JOIN publications_likes pl ON p.id = pl.pub_id AND pl.user_id = $1
WHERE p.user_id = $2;

您需要在联接中使用两个条件以确保找到正确的 pl 行,因为您要联接到 M:N 关系的联结表。否则你真的不知道你实际上会加入哪个 pl,你最终可能会得到 liked 的假阴性结果。

关于sql - 使用 CASE 在两个表中查询 PostgreSQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51353820/

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