【发布时间】:2020-11-22 04:24:42
【问题描述】:
LEFT JOIN 到 LATERAL 子查询通常特别方便,这样即使 LATERAL 子查询没有为源行生成任何行,源行也会出现在结果中。例如,如果 get_product_names() 返回制造商生产的产品名称,但我们表中的某些制造商当前没有生产产品,我们可以找出哪些是这样的:
SELECT m.name
FROM manufacturers m LEFT JOIN LATERAL get_product_names(m.id) pname ON true
WHERE pname IS NULL;
所有内容摘自 PostgreSQL 手册。 LINK 现在我终于可能明白 LATERAL 是什么意思了。在这种情况下,
总的来说,我不确定 get_product_names 是表还是函数。以下是我的理解。
A:get_product_names(m.id) 是一个函数,使用m.id 作为输入参数返回一个表。返回表别名为pname。总体而言,它是一个表 m 连接一个空(where 条件)表。
B:get_product_names 是一个表,表 m 在 m.id 上左连接表 get_product_names。 pname 是 get_product_names 的别名。总体而言,它是一个表 m 连接一个空(where 条件)表。
【问题讨论】:
标签: postgresql