右表行不存在时的PostgreSQL横向连接

问题描述

当我在数据库中有一个没有帖子的类别时,结果选择将返回没有空类别的行。如何接收具有空类别的表。

  SELECT
    c.id as category_id,pp.id as post_id
  FROM categories c,LAteraL
  (SELECT
    id
  FROM posts
  WHERE c.id = posts.category_id
   ORDER BY views DESC
   LIMIT 2) pp
  ORDER BY c.category ASC,pp.id ASC

当前查询结果:

category_id | post_id
----------------------
1           | 1
1           | 2
3           | 3
3           | 4

我需要:

category_id | post_id
----------------------
1           | 1
1           | 2
2           |
3           | 3
3           | 4

解决方法

使用left join

SELECT
    c.id as category_id,pp.id as post_id
FROM categories c
LEFT JOIN LATERAL
(SELECT
    id
FROM posts
WHERE c.id = posts.category_id
    ORDER BY views DESC
    LIMIT 2) pp ON TRUE
ORDER BY c.category ASC,pp.id ASC

注意,由于横向连接引用了上一张表,因此我已经使用on true作为连接条件。