【oracle】在left join时两表关联的字段为null时失效问题

oracle在left join时两表关联的字段为null时失效问题

问题描述

TESTA

subject score
语文 90
数学 30
英语 9
100

TESTB

subject score
语文 3
数学 79
英语 99
120

如果用left join会丢失掉TESTB的空值对应的120这个值

SELECT a.*, b.* 
FROM TESTA a
LEFT JOIN TESTB b ON a.subject = b.SUBJECT;
SUBJECT SCORE SUBJECT SCORE
语文 90 语文 3
数学 30 数学 79
英语 9 英语 99
100
解决方案

在left join前要将空数据赋值,

with a as (SELECT nvl(subject, '-')subject, score FROM TESTA ),
b as (SELECT nvl(subject, '-')subject, score FROM TESTB )
SELECT a.*, b.* 
FROM a
LEFT JOIN b ON a.subject = b.SUBJECT;
SUBJECT SCORE SUBJECT SCORE
语文 90 语文 3
数学 30 数学 79
英语 9 英语 99
- 100 - 120

你可能感兴趣的:(oracleleft-join)