基于Id_Orig字段多条件左关联多表的最优实现方法咨询
最优实现方案及ON子句可行性说明
完全可以在LEFT JOIN的ON子句中实现这个关联逻辑,这也是最直接高效的方案,能完美满足你保留Table1所有记录的需求。
具体SQL写法
SELECT Table1.Id_Orig, Table1.F1, Table1.F2, Table_DO.*, Table_CC.*, Table_DP.* FROM Table1 LEFT JOIN Table_DO ON Table1.Id_Orig = Table_DO.Id_Orig AND Table1.Id_Orig = 'DO' -- 仅当Id_Orig为'DO'时才关联 LEFT JOIN Table_CC ON Table1.Id_Orig = Table_CC.Id_Orig AND Table1.Id_Orig = 'CC' -- 仅当Id_Orig为'CC'时才关联 LEFT JOIN Table_DP ON Table1.Id_Orig = Table_DP.Id_Orig AND Table1.Id_Orig = 'DP' -- 仅当Id_Orig为'DP'时才关联
逻辑说明
- 每个LEFT JOIN的ON子句同时包含主表与关联表的Id_Orig相等以及主表Id_Orig等于对应标识两个条件,只有当主表记录的Id_Orig匹配对应关联表的类型时,才会建立关联;不匹配时,关联表的所有字段会以NULL值填充,主表记录依然完整保留。
- 这种写法逻辑直观,数据库可利用
Id_Orig字段的索引(如果已创建)提升关联效率,针对1000条记录的主表来说性能完全够用。 - 最终结果会完整保留Table1的1000条记录,仅为符合条件的记录填充对应关联表的字段。
内容的提问来源于stack exchange,提问作者user11311005
相关产品推荐
相关产品推荐

