SQL如何根据查询结果动态选择LEFT JOIN关联表获取明细数据
需求实现方案
该需求可直接通过标准SQL实现,无需调整现有表结构,以下是两种常用实现方式:
方案1:多表左关联 + 条件取值
分别关联两张分组表,通过group字段判断取对应表的name、age字段:
SELECT r.id, COALESCE(a.name, b.name) AS name, COALESCE(a.age, b.age) AS age, r.result FROM result_1 r LEFT JOIN group_a a ON r.`group` = 'a' AND r.id = a.id LEFT JOIN group_b b ON r.`group` = 'b' AND r.id = b.id ORDER BY r.result DESC, r.id;
说明:COALESCE函数会返回参数中第一个非空的值,当记录的group为a时,关联group_b的结果为空,因此会取group_a的字段值,反之亦然。
方案2:合并分组表后关联
先将所有分组表合并为统一数据集,新增group标识字段后再与result_1关联,后续新增分组表时扩展更方便:
WITH all_group AS ( SELECT 'a' AS `group`, id, name, age FROM group_a UNION ALL SELECT 'b' AS `group`, id, name, age FROM group_b ) SELECT r.id, g.name, g.age, r.result FROM result_1 r INNER JOIN all_group g ON r.`group` = g.`group` AND r.id = g.id ORDER BY r.result DESC, r.id;
两种方案都可以输出你期望的结果,如果分组表数量固定推荐选方案1,后续如果会新增group_c、group_d这类表,选方案2维护成本更低。
内容的提问来源于stack exchange,提问作者null846097
相关产品推荐
相关产品推荐

