gpt4 book ai didi

MySQL 从具有列名的 select 语句中的列列表中返回第一个非 NULL 值

转载 作者:行者123 更新时间:2023-11-29 04:36:35 28 4
gpt4 key购买 nike

下面有一个sql查询:

SELECT 
md.refereeInternetSearch,
md.refereeCompanyColleague,
md.refereeIndustryPeer,
md.refereeIndustryEvent,
md.refereeIndustryPublication,
md.refereeMarketingEmail,
md.refereeOther
FROM
marketing_details md
WHERE
md.id = 14588

在上述 select 语句的 7 列中,只有一列有值,其余为空。是否可以使用某种 sql 语句只选择一个不为空的列值?

最佳答案

使用 coalesce()从参数列表中返回第一个非空值的函数:

SELECT 
coalesce(md.refereeInternetSearch,
md.refereeCompanyColleague,
md.refereeIndustryPeer,
md.refereeIndustryEvent,
md.refereeIndustryPublication,
md.refereeMarketingEmail,
md.refereeOther) as non_null_value
FROM
marketing_details md
WHERE
md.id = 14588

但是,它无法告诉您值来自哪一列。

更新

如果你真的想使用 sql 来检索具有非空值的字段的名称,那么你可以使用下面的可怕的 sql 语句来实现。它的作用是将记录中的每个字段值连接成一个字符串,其中值用逗号分隔。 NULL 值被转换为空字符串。然后使用 find_in_set()函数它在上面的字符串中找到唯一的非空值的位置。然后使用 elt()函数它根据 find_in_set() 返回的位置返回字段名称文字列表中的字段名称。

SELECT
md.id,
coalesce(md.refereeInternetSearch,
md.refereeCompanyColleague,
md.refereeIndustryPeer,
md.refereeIndustryEvent,
md.refereeIndustryPublication,
md.refereeMarketingEmail,
md.refereeOther) as non_null_value,
elt(find_in_set(coalesce(md.refereeInternetSearch,
md.refereeCompanyColleague,
md.refereeIndustryPeer,
md.refereeIndustryEvent,
md.refereeIndustryPublication,
md.refereeMarketingEmail,
md.refereeOther),
concat(coalesce(md.refereeInternetSearch,''),',',
coalesce(md.refereeCompanyColleague,''),',',
coalesce(md.refereeIndustryPeer,''),',',
coalesce(md.refereeIndustryEvent,''),',',
coalesce(md.refereeIndustryPublication,''),',',
coalesce(md.refereeMarketingEmail,''),',',
coalesce(md.refereeOther,'')
)
),'refereeInternetSearch',
'refereeCompanyColleague',
'refereeIndustryPeer',
'refereeIndustryEvent',
'refereeIndustryPublication',
'refereeMarketingEmail',
'refereeOther'
) as field_name
FROM
marketing_details md
WHERE
md.id = 14588

嗯,我希望我所有的括号都正确!

关于MySQL 从具有列名的 select 语句中的列列表中返回第一个非 NULL 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40002388/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com