如何获取SQL WHERE条件中匹配到的列的对应值?
解决方案
你要的查询逻辑用标准SQL的CASE表达式就可以实现,另外注意你示例SQL里的小问题:模糊匹配需要用LIKE关键字而不是=,否则%不会作为通配符生效。
通用兼容写法(支持所有主流数据库 MySQL/PostgreSQL/SQL Server等)
SELECT id, CASE WHEN name LIKE '%fir%' THEN name WHEN Location LIKE '%fir%' THEN Location END AS matched_column_value FROM your_table_name WHERE name LIKE '%fir%' OR Location LIKE '%fir%';
注意替换SQL中的your_table_name为你实际的表名
逻辑说明
- 因为WHERE条件已经过滤出了至少有一个列匹配关键词的行,所以CASE表达式不会返回空值
- 上面的写法默认优先返回name列的匹配结果,如果某行的name和Location同时都匹配关键词,会取name的值;如果你需要优先返回Location的值,调换两个WHEN判断的顺序即可
- 你提供的样例数据执行上面的SQL时,匹配到name列的
First,matched_column_value就会返回First,完全符合你的预期
特定数据库简化写法
如果是用MySQL,还可以用IF+COALESCE的组合简化写法:
SELECT id, COALESCE(IF(name LIKE '%fir%', name, NULL), IF(Location LIKE '%fir%', Location, NULL)) AS matched_column_value FROM your_table_name WHERE name LIKE '%fir%' OR Location LIKE '%fir%';
内容的提问来源于stack exchange,提问作者Slr Shoppee
相关产品推荐
相关产品推荐

