关于oracle: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

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

这个站点使用 Akismet 来减少垃圾评论。了解你的评论数据如何被处理