如何在SQL查询中用同行列值替换NULL值
用SQL替换NULL值为对应默认列内容
要实现将First Name和Last Name中的NULL值替换为同一行的Default - First Name和Default - Last Name值,最通用的方法是使用COALESCE()函数——这个函数会返回传入参数列表里的第一个非NULL值,几乎所有主流SQL数据库(MySQL、PostgreSQL、SQL Server等)都支持它。
通用SQL查询语句
SELECT "ID", COALESCE("First Name", "Default - First Name") AS "First Name", COALESCE("Last Name", "Default - Last Name") AS "Last Name", "Default - First Name", "Default - Last Name" FROM your_table;
语句说明
- 对于
First Name列:如果原字段值不为NULL,就保留原值;如果是NULL,就取同一行的Default - First Name的值 - 对于
Last Name列:逻辑和上面完全一致 - 其余列直接原样选择即可
不同数据库的列名适配
由于你的列名包含空格和特殊符号,不同数据库对这类列名的包裹方式有差异:
- MySQL/MariaDB:使用反引号包裹列名
SELECT `ID`, COALESCE(`First Name`, `Default - First Name`) AS `First Name`, COALESCE(`Last Name`, `Default - Last Name`) AS `Last Name`, `Default - First Name`, `Default - Last Name` FROM your_table; - SQL Server:使用方括号包裹列名
SELECT [ID], COALESCE([First Name], [Default - First Name]) AS [First Name], COALESCE([Last Name], [Default - Last Name]) AS [Last Name], [Default - First Name], [Default - Last Name] FROM your_table;
执行上述查询后,就能得到你期望的结果:
"ID" "First Name" "Last Name" "Default - First Name" "Default - Last Name" "1111" "Bill" "Jones" "FN Name 1" "LN Name 1" "2222" "FN Name 2" "LN Name 2" "FN Name 2" "LN Name 2" "3333" "Emma" "Jean" "FN Name 3" "LN Name 3"
内容的提问来源于stack exchange,提问作者Jeb
相关产品推荐
相关产品推荐

