You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PostgreSQL执行LEFT JOIN LATERAL ON TRUE语句报错排查及实现方法

问题原因

你混淆了官方示例中的返回集合函数与本地创建的同名表:
官方示例里的get_product_names(m.id)是自定义的集合返回函数(SRF),而你本地仅创建了名为get_product_names的普通关系表,直接写get_product_names(m.id)会被PostgreSQL判定为函数调用,自然抛出找不到对应函数的错误。

正确实现LEFT JOIN LATERAL逻辑的写法

如果要使用LATERAL语法实现需求,将函数调用位置替换为可引用左表字段的关联子查询即可:

SELECT m.name
FROM manufacturers m 
LEFT JOIN LATERAL (
    SELECT product FROM get_product_names WHERE id = m.id
) pname ON true
WHERE pname.product IS NULL;

执行后返回的结果为没有对应产品的制造商:m3、m5,符合预期。

补充说明

当前场景不使用LATERAL也可以用普通LEFT JOIN实现相同效果,写法更简洁:

SELECT m.name
FROM manufacturers m
LEFT JOIN get_product_names gpn ON m.id = gpn.id
WHERE gpn.id IS NULL;

LATERAL更适合针对左表每行做子查询的场景,比如按制造商分组取最新的2条产品记录、调用自定义集合返回函数做关联等。

内容的提问来源于stack exchange,提问作者jian

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 11:39:04