MySQL关联查询:如何基于表a获取表b或c的info字段(单查询实现)
单条SQL实现从表b或表c获取关联的info字段
Got it! 既然a.data只会匹配b.data或者c.data中的某一个,咱们完全可以用单条SQL搞定这个需求,给你两种实用的方案:
方案一:LEFT JOIN + COALESCE函数
先让表a分别左关联表b和表c,再用COALESCE函数取第一个非空的info值(因为只会有一个表能匹配成功,另一个的info会是NULL):
SELECT COALESCE(b.info, c.info) AS info FROM a LEFT JOIN b ON a.data = b.data LEFT JOIN c ON a.data = c.data;
为啥这么写:
LEFT JOIN保证表a的所有记录都会被保留,哪怕其中一个关联表没有匹配项- COALESCE会按顺序检查传入的参数,返回第一个不为NULL的值,完美适配咱们“二选一”的场景
方案二:UNION ALL合并查询
既然你原来的两次查询各自只会返回匹配成功的记录,直接用UNION ALL把两个结果集合并就行——因为每个a的记录只会出现在其中一个结果里,完全不用担心重复:
SELECT b.info AS info FROM a INNER JOIN b ON a.data = b.data UNION ALL SELECT c.info AS info FROM a INNER JOIN c ON a.data = c.data;
这个方案的优势:
UNION ALL比UNION效率更高,因为它不会做去重操作(咱们的场景根本不需要去重)- 两个
INNER JOIN分别筛选出匹配b和匹配c的记录,合并后就是你要的所有info值
这两种方案都能满足需求,你可以根据自己的数据库类型和数据量来选~
内容的提问来源于stack exchange,提问作者AymDev
相关产品推荐
相关产品推荐

