MySQL多表查询:如何从两个表中按需获取名称字段
解决方案
因为数据规则保证number仅存在于表a或表b中的一张,所以可以用两种方式实现需求:
方式一:左关联双表 + COALESCE函数
利用COALESCE()函数返回第一个非空值的特性,同时左关联表a和表b,直接取存在的那个name:
SELECT c.number, c.field, COALESCE(a.name, b.name) AS name FROM c LEFT JOIN a ON c.number = a.number LEFT JOIN b ON c.number = b.number
方式二:合并a、b表后再关联
先通过UNION ALL把表a和表b的number与name合并成一个数据集,再和表c关联,这种写法在a、b数据量较大时效率更优:
SELECT c.number, c.field, combined.name FROM c LEFT JOIN ( SELECT number, name FROM a UNION ALL SELECT number, name FROM b ) AS combined ON c.number = combined.number
内容的提问来源于stack exchange,提问作者StarDestroyer
相关产品推荐
相关产品推荐

