将表连接到另一个表上的最有效方法,该方法具有部分数据的2个单独的连接条件

时间:2019-04-12 10:59:05

标签: sql db2

我有两个要联接的表(Table1Table2),但是联接标准因Country的{​​{1}}列中的数据而异

对于Table1列中所有值为'UK'的记录,我想加入CountryJoinField1JoinField2

对于JoinField3列中所有值为“ USA”的记录,我希望加入CountryJoinField2JoinField3上。

目前,我只是使用不同的联接条件将JoinField4两次联接到Table2上。但是,我想避免这种情况,因为Table1拥有数亿行数据,并且我的查询运行出现问题。

是否有更有效的方式进行此联接? 请注意,我正在使用DB2 SQL,并且不能在查询中使用函数。

enter image description here

1 个答案:

答案 0 :(得分:0)

您可以这样表示:

select . . .
from table2 t2 join
     table1 t1
     on t2.country = t1.country and
        t2.Joinfield2 = t1.Joinfield2 and
        t2.Joinfield3 = t1.Joinfield3 and
        ( (t2.country = 'UK' and t2.Joinfield1 = t1.Joinfield1) or
          (t2.country = 'USA' and t2.Joinfield4 = t1.Joinfield4) 
        );

我不确定这是否会提高性能,因为or可能会成为性能杀手。但是(country, joinfield2, joinfield3, joinfield1, joinfield4)上的索引会有所帮助。