【发布时间】:2014-12-26 12:11:51
【问题描述】:
简单的用例:我有一个用户表和一个设置表,我想为所有用户获取选定的时区。
因此我的查询:
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 中的默认值发生更改,我不想更新我的查询。
【问题讨论】:
-
您是否为设置表中的 TimeZone 列设置了默认值?
-
你可能也对这个问题感兴趣:stackoverflow.com/questions/8266771/…
-
提供适当的 DDL 可能很有用