如何实现SQL查询:存在匹配返回列值,否则返回查询参数值
解决方案:匹配参数返回字段值,无匹配返回参数本身
核心思路是先将待查询的参数构建成临时数据集,再通过左连接关联表T1,确保所有参数都能出现在结果中,最后用空值处理函数匹配字段值或返回参数本身。
标准SQL实现
SELECT COALESCE(t1.column_1, params.param_value) AS result FROM (VALUES ('value1'), ('value2'), ('value3')) AS params(param_value) LEFT JOIN T1 ON T1.column_2 = params.param_value;
VALUES子句生成包含所有查询参数的临时表LEFT JOIN保留所有参数行,匹配到T1中对应记录则关联column_1COALESCE取第一个非空值:有匹配时用column_1,无匹配时用参数值
MySQL兼容写法(适用于8.0以下版本)
SELECT IFNULL(t1.column_1, params.param_value) AS result FROM ( SELECT 'value1' AS param_value UNION ALL SELECT 'value2' UNION ALL SELECT 'value3' ) AS params LEFT JOIN T1 ON T1.column_2 = params.param_value;
用UNION ALL拼接参数生成临时表,IFNULL替代COALESCE实现空值判断
为什么CASE语句无法实现
直接使用CASE语句查询T1时,不存在匹配的参数不会生成对应的结果行,CASE只能对已存在的行做逻辑判断,无法主动生成参数对应的空行。左连接参数数据集的方式才能确保所有参数都出现在最终结果里。
内容的提问来源于stack exchange,提问作者Nirmal Mahen
相关产品推荐
相关产品推荐

