MySQL使用OR查询联系人时如何直接返回匹配的对应联系人列
解决方案
你可以直接在查询中通过MySQL原生的条件判断函数生成计算列,直接标记出匹配的字段,无需后续额外校验。
基础用法(适合无两列同时匹配的场景)
因为你的WHERE条件已经筛选出至少有一列匹配目标值的记录,直接用IF函数判断即可:
SELECT *, IF(Contact1Name = 'XYZ', 'Contact1Name', 'Contact2Name') AS matched_column FROM contacts WHERE Contact1Name = 'XYZ' OR Contact2Name = 'XYZ'
返回结果中新增的matched_column字段会直接告诉你当前行匹配的是第一联系人还是第二联系人。
适配两列同时匹配的场景
如果存在Contact1Name和Contact2Name同时为XYZ的记录,可以用CASE语句做更细致的标记:
SELECT *, CASE WHEN Contact1Name = 'XYZ' AND Contact2Name = 'XYZ' THEN 'Both' WHEN Contact1Name = 'XYZ' THEN 'Contact1Name' ELSE 'Contact2Name' END AS matched_column FROM contacts WHERE 'XYZ' IN (Contact1Name, Contact2Name)
这里WHERE条件改用IN写法,简化多列匹配的判断逻辑。
优化写法(避免重复写目标值)
如果需要频繁修改查询的目标联系人名,可以用变量预定义目标值,减少重复修改的成本:
SET @target_contact = 'XYZ'; SELECT *, CASE WHEN Contact1Name = @target_contact AND Contact2Name = @target_contact THEN 'Both' WHEN Contact1Name = @target_contact THEN 'Contact1Name' ELSE 'Contact2Name' END AS matched_column FROM contacts WHERE @target_contact IN (Contact1Name, Contact2Name)
内容的提问来源于stack exchange,提问作者John Roberts
相关产品推荐
相关产品推荐

