如何编写SQL根据子表Table3的type值返回父表table1对应registration_id
需求实现方案
你可以通过分组聚合统计子表Table3的type值分布,配合CASE语句实现规则匹配,改写后的SQL如下:
SELECT t1.registration_id, CASE WHEN MAX(CASE WHEN t3.type = 1 THEN 1 ELSE 0 END) = 1 AND MAX(CASE WHEN t3.type = 3 THEN 1 ELSE 0 END) = 1 THEN 123 WHEN MAX(CASE WHEN t3.type = 1 THEN 1 ELSE 0 END) = 1 AND MAX(CASE WHEN t3.type = 3 THEN 1 ELSE 0 END) = 0 THEN 321 -- 其他场景可自行补充返回逻辑,也可调整为返回NULL ELSE t1.registration_id END AS target_registration_id FROM table1 t1 LEFT JOIN table2 t2 ON t2.registration_id = t1.registration_id LEFT JOIN table3 t3 ON t3.x_person_id = t2.x_person_id GROUP BY t1.registration_id;
逻辑说明
- 按
t1.registration_id分组,确保每一个父表的登记ID对应一组关联的子表数据 - 用聚合函数
MAX配合内层CASE判断当前分组下是否存在对应type值的记录,返回1代表存在,0代表不存在 - 外层
CASE按照规则匹配返回指定的registration_id值
表结构参考:
内容的提问来源于stack exchange,提问作者Kikham Sikoulabot
相关产品推荐
相关产品推荐

