右表行不存在时的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作为连接条件。

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...