在左联接中,如何用默认列值替换NULL?
作者:互联网
易于使用的案例:我有一个“用户”和“设置”表,我想为所有用户获取选定的时区.
因此,我的查询:
select U.UserId, S.TimeZone
from Users as U
left join Settings as S on S.UserId = U.UserId;
但是,并非所有用户都设置了时区,这就是为什么我进行左联接而不是从“设置”中进行选择的原因.这也是为什么我为某些用户获得NULL值的原因:
+--------+--------------------+
| UserId | TimeZone |
+--------+--------------------+
| 494 | NULL |
| 734 | Europe/Zurich |
| 789 | America/New_York |
现在,我想用为TimeZone列设置的默认值替换NULL值:
select U.UserId, IFNULL(S.TimeZone, DEFAULT(S.TimeZone))
from Users as U
left join Settings as S on S.UserId = U.UserId;
但这是行不通的,对于没有设置的用户,我仍然会得到NULL.我的猜测是,这是由于MySQL尝试获取不存在的列的默认值(例如,UserId 494没有TimeZone列)引起的.
现在如何获取默认列值而不是NULL值.可能吗?
当然,我可以将纯文本默认值放在IFNULL中,但是如果有一天在MySQL中更改默认值,我就不必更新查询.
解决方法:
select U.UserId, COALESCE(S.TimeZone, DEFAULT(S.TimeZone)) TimeZone
from Users as U
left join Settings as S on S.UserId = U.UserId;
标签:null,left-join,mysql 来源: https://codeday.me/bug/20191121/2049219.html