【发布时间】:2018-02-28 22:41:17
【问题描述】:
我有一个包含所有帖子的表格。我还有一个表,当用户喜欢带有外键 user_id 和 post_id 的帖子时,会添加一行。
我想检索 所有 帖子的列表以及特定用户是否喜欢该帖子。使用外部联接,我最终得到了两次帖子。用户 1 一次,用户 2 一次。如果我使用 WHERE 过滤 likes.user_id = 1 AND likes.user_id 为 NULL,我不会得到只有其他用户喜欢的帖子。
理想情况下,我会使用单个查询来完成此操作。 SQL 不是我的强项,所以我什至不确定是否需要子查询或连接是否足够。
抱歉这么含糊,但我认为这是一个足够常见的查询,应该有一定的意义。
编辑:我用我提到的两个查询创建了一个 DB Fiddle。 https://www.db-fiddle.com/f/oFM2zWsR9WFKTPJA16U1Tz/4
更新:昨晚想通了。这就是我最终得到的结果:
SELECT
posts.id AS post_id,
posts.title AS post_title,
CASE
WHEN EXISTS (
SELECT *
FROM likes
WHERE posts.id = likes.post_id
AND likes.user_id = 1
) THEN TRUE
ELSE FALSE END
AS liked
FROM posts;
虽然我能够解决它,但也感谢@wildplasser 的回答。
【问题讨论】:
-
您能否提供更多上下文/代码 sn-ps,例如您的模型?
-
如果你能提供一个例子,也许能更具体地说明你想要的结果如何,那就太好了。
-
我现在已经更新了一个 DB Fiddle,其中包含我上面提到的模式和两个查询。
标签: sql postgresql