Oracle SQL多表关联如何加入movement表并保留其全量数据
解决方案
要满足保留全部符合条件的movement表记录的要求,核心是将筛选后的movement作为左连接的主表,其余关联表全部使用LEFT JOIN关联,即使后续关联表没有匹配数据,主表记录也会完整保留,对应字段返回NULL,最终返回行数和单独查询符合条件的movement数据一致,均为1500条。
最终查询语句
SELECT m.movement_id, t.transction_id, pt.name, pa.date FROM movement m LEFT JOIN transction t ON t.transction_id = m.movement_id LEFT JOIN position_trans pt ON t.transction_id = pt.transction_id LEFT JOIN position_acc pa ON pt.postion_id = pa.postition_id WHERE m.name = 'CASH';
注意事项
- 不要使用旧的隐式内连接语法(即FROM后用逗号分隔多张表),隐式连接默认是内连接,会直接过滤掉没有匹配关联条件的行,无法满足保留全部
movement记录的要求 m.name = 'CASH'的筛选条件要写在WHERE子句中对主表直接过滤,不要放到任意LEFT JOIN的ON条件中,避免生成多余无效的空记录- 注意核对字段拼写是否和实际表结构一致,你提供的示例语句中存在
transction(疑似应为transaction)、postion_id/postition_id(疑似应为position_id)的拼写误差,若实际字段为标准拼写请自行替换后再执行。
内容的提问来源于stack exchange,提问作者Debo
相关产品推荐
相关产品推荐

