Oracle SQL中SELECT子句定义新变量获取母亲体重的实现咨询
实现方案
方案1:自关联查询(推荐,效率更高)
这是适配该场景的最优实现方式,利用母亲和子女同存一张人员表的特性,通过自关联匹配母亲记录获取对应体重,修改后的SQL如下:
select to_char(a.from_date, 'dd-mm-yyyy') as fromdate, a.Name, a.Weight, a.Number, a.Mother_number, m.Weight as Mother_weight -- 新增母亲体重字段 from table1 a inner join table2 b on a.family_ref = b.family_ref left join table1 m on a.Mother_number = m.Number -- 自关联匹配母亲记录 where 1=1 -- 其他筛选条件保持不变
- 采用
LEFT JOIN做自关联,若对应母亲编号无匹配记录,Mother_weight会返回空值,和你期望的输出效果一致 - 原写法中的隐式内连接(逗号分隔多表)改写为显式
INNER JOIN后,可读性更强,也更容易排查关联逻辑错误
方案2:SELECT子句标量子查询(适合小数据量临时查询)
如果不想修改原表关联逻辑,也可以直接在SELECT子句中嵌套子查询实现需求,代码如下:
select to_char(a.from_date, 'dd-mm-yyyy') as fromdate, a.Name, a.Weight, a.Number, a.Mother_number, (select Weight from table1 where Number = a.Mother_number) as Mother_weight from table1 a, table2 b where 1=1 and a.family_ref=b.family_ref -- 其他筛选条件保持不变
该写法逻辑简单,但数据量较大时查询效率低于自关联方案,仅建议小范围验证数据时使用。
优化建议
如果查询数据量较大,可提前为table1的Number字段建立索引,能大幅提升关联/子查询的执行速度。
内容的提问来源于stack exchange,提问作者Cecilie S. K
相关产品推荐
相关产品推荐

