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 |
|
|
解决方案
【【oracle】在left join时两表关联的字段为null时失效问题】在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 |
推荐阅读