在LEFT JOIN LATERAL语句中使用ON TRUE的作用是什么?
为什么这个SQL查询里需要用
on true? 问题表
| id | text |
|---|---|
| 1 | Boba Fett is a... |
问题选项表
| id | question_id | text | correct |
|---|---|---|---|
| 1 | 1 | Jedi | false |
| 1 | 1 | Sith | false |
| 1 | 1 | Mandalorian | true |
你的查询语句如下:
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
相关产品推荐
相关产品推荐

