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 |