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

Oracle中多Lateral Join/Apply语句的正确语法求解

Oracle 中 Lateral Join/APPLY 的正确实现语法

基于需求(关联authors和books表,通过Lateral Join计算税费、含税总价并获取作者信息),以下是符合Oracle语法规范的两种实现方式:

方式一:使用LATERAL关键字

SELECT
    b.id, b.title,
    b.price, sq.tax, sq2.inc,
    a.givenname, a.othernames, a.familyname,
    a.home
FROM books b
    CROSS JOIN LATERAL (SELECT b.price * 0.1 AS tax FROM dual) sq
    CROSS JOIN LATERAL (SELECT b.price + sq.tax AS inc FROM dual) sq2
    LEFT JOIN LATERAL (SELECT givenname, othernames, familyname, home 
                       FROM authors 
                       WHERE id = b.authorid) a ON true;

关键语法说明:

  • Oracle要求单行计算的子查询必须包含FROM dual
  • 子查询内必须通过AS为计算列定义别名(如AS tax)
  • 表别名不能使用AS,直接指定别名即可(如sq、a)
  • 用CROSS JOIN LATERAL实现无条件关联,用LEFT JOIN LATERAL ... ON true实现左关联

方式二:使用CROSS APPLY/OUTER APPLY

SELECT
    b.id, b.title,
    b.price, sq.tax, sq2.inc,
    a.givenname, a.othernames, a.familyname,
    a.home
FROM books b
    CROSS APPLY (SELECT b.price * 0.1 AS tax FROM dual) sq
    CROSS APPLY (SELECT b.price + sq.tax AS inc FROM dual) sq2
    OUTER APPLY (SELECT givenname, othernames, familyname, home 
                 FROM authors 
                 WHERE id = b.authorid) a;

关键语法说明:

  • CROSS APPLY等价于CROSS JOIN LATERAL,OUTER APPLY等价于LEFT JOIN LATERAL ... ON true
  • 同样需要遵循单行子查询加FROM dual、子查询内定义列别名的规则

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 09:08:22