SQL JOIN结果出现null时取左表对应值的实现方法
解法说明
你原始写法使用了RIGHT JOIN,会保留右表table2的所有行,而你需要保留左表table1的全部行,应当使用LEFT JOIN。
处理NULL值可以用标准SQL的COALESCE函数,它会返回传入参数中第一个非NULL的值,刚好满足你“右表无匹配时取左表对应value”的需求。
通用SQL写法(支持所有主流数据库)
SELECT t1.Num, t1.Value AS Value1, COALESCE(t2.Value, t1.Value) AS Value2 FROM table1 t1 LEFT JOIN table2 t2 ON t1.Num = t2.Num
不同数据库的兼容写法(效果和上面一致)
- MySQL/MariaDB 可用
IFNULL替代:SELECT t1.Num, t1.Value AS Value1, IFNULL(t2.Value, t1.Value) AS Value2 FROM table1 t1 LEFT JOIN table2 t2 ON t1.Num = t2.Num - Oracle 可用
NVL替代:SELECT t1.Num, t1.Value AS Value1, NVL(t2.Value, t1.Value) AS Value2 FROM table1 t1 LEFT JOIN table2 t2 ON t1.Num = t2.Num
内容的提问来源于stack exchange,提问作者Антон Гридюшко
相关产品推荐
相关产品推荐

