SQL COALESCE()函数可以用一个句子来描述:COALESCE返回为每一行传递的第一个非NULL值。请以简单,合乎逻辑的方式举一个例子,重新写出这句话。
-- assume the a.id column contains the one and only NULL value in a large table
SELECT COALESCE(a.id, a.id) AS modified_id
FROM accounts a
这具有令人惊讶的结果,它实际上是在新列modified_id中创建一个值!如果函数中的第一个参数为NULL,那么第二个参数(用于替换第一个参数中NULL的值)如何在结果Modify_id中产生任何结果?我们知道第二个参数中的值必须为NULL,因为它实际上是第一个参数。
编辑:
中产生结果SELECT *
FROM accounts a
LEFT JOIN orders o
ON a.id = o.account_id
WHERE o.total IS NULL;
中产生结果
SELECT
COALESCE(a.id, a.id) AS filled_id,
a.name, a.website, a.lat, a.long, a.primary_poc, a.sales_rep_id, o.*
FROM accounts a
LEFT JOIN orders o
ON a.id = o.account_id
WHERE o.total IS NULL;
答案 0 :(得分:1)
您必须输入错字或其他简单原因。
验证非常容易,只需在同一查询中同时返回a.id
和COALESCE(a.id, a.id)
。确保使用别名,以使您知道您正在查看的是a.id
,而不是其他表中的id
。
SELECT
a.id AS a_id,
COALESCE(a.id, a.id) AS filled_id,
a.name, a.website, a.lat, a.long, a.primary_poc, a.sales_rep_id, o.*
FROM accounts a
LEFT JOIN orders o
ON a.id = o.account_id
WHERE o.total IS NULL;
答案 1 :(得分:0)
对于您提供的这个示例,如果a.id为null,那么第二个a.id当然也将为null。
COALESCE对于例如左连接
很有帮助select coalesce(DE.user_id, KBU.user_id, OUD.user_id) as User_ID
LEFT JOIN dm.EDW.DIM_Employee DE
ON de.user_id = RIGHT(SubQuery.[UserID], LEN(SubQuery.[UserID]) - 5)
AND de.dss_current_flag = 'Y'
AND de.Dss_Deleted_Flag = 'N'
-- Some of the users are missing from our Dim Table so need to use other sources
LEFT JOIN tts..load_KBNetwork_Users KBU
ON KBU.UID = RIGHT(SubQuery.[UserID], LEN(SubQuery.[UserID]) - 5)
LEFT JOIN dm.dbo.organisationunitdimension OUD
ON oud.OrgUnitLevel5SourceId = RIGHT(SubQuery.[UserID], LEN(SubQuery.[UserID]) - 5)
AND oud.dss_current_flag = 'Y'
如果DE
为空,那么我可以从接下来的两个空值中获取第一个空值(如果可能的话)