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

在LEFT JOIN LATERAL语句中使用ON TRUE的作用是什么?

为什么这个SQL查询里需要用on true?

问题表

idtext
1Boba Fett is a...

问题选项表

idquestion_idtextcorrect
11Jedifalse
11Sithfalse
11Mandaloriantrue

你的查询语句如下:

select question.id
     , "question_option"."data" as "options"
from question
left join lateral
    (select json_agg(
                json_build_object( 'id',     "question_option"."id"
                                  ,'text',   "question_option"."text"
                                  ,'correct',"question_option"."correct"
                )
            ) as "data"
     from question_option
     where "question_option".question_id = question.id) as "question_option" on true
where question.quiz_id = '1';

这里用on true的原因很直接:

  • 你用的是left join lateral(PostgreSQL的横向连接),而left join语法上必须指定连接条件,否则会报错。
  • 横向子查询里已经通过where "question_option".question_id = question.id和主表question做了关联,没有额外的过滤条件需要加在on子句里。on true就表示“无条件匹配”,确保主表的每一行都会被保留——哪怕某个问题没有对应的选项,子查询返回null,left join依然会保留主表的该行数据。

简单说,on true就是为了满足left join的语法要求,同时保证你想要的关联逻辑:主表所有行都对应子查询的聚合结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 15:55:03