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 |
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用。你还可以使用@来通知其他用户。