MySQL返回select语句中具有列名的列列表中的第一个非空值
我在下面有一个sql查询:MySQL返回select语句中具有列名的列列表中的第一个非空值,mysql,select,Mysql,Select,我在下面有一个sql查询: SELECT md.refereeInternetSearch, md.refereeCompanyColleague, md.refereeIndustryPeer, md.refereeIndustryEvent, md.refereeIndustryPublication, md.refereeMarketingEmail, md.refereeOther FROM marketing_detai
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语句仅选择一个非空的列值 使用函数从参数列表中返回第一个非空值:
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语句来实现这一点。它所做的是将记录中的每个字段值连接成一个字符串,其中的值用逗号分隔。空值转换为空字符串。然后使用函数查找上述字符串中唯一非空值的位置。然后使用函数,它根据find\u in_set()
返回的位置,从字段名文本列表中返回字段名
哈,我希望我把括号都弄对了 Thank you mate的可能重复,这正是我所需要的,但是有没有办法知道该值来自哪个列?好吧,我确实给了您一个解决方案,但我认为如果您使用正确的编程语言,而不是sql,您可能会过得更好。
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