Sql 将一个表连接到另一个表的最有效方法是为部分数据使用两个单独的连接条件

Sql 将一个表连接到另一个表的最有效方法是为部分数据使用两个单独的连接条件,sql,db2,Sql,Db2,我有两个表(Table1和Table2)要加入,但是,加入标准因Table1的Country列中的数据而异 对于Country列中值为“UK”的所有记录,我想加入JoinField1、JoinField2和JoinField3 对于Country列中所有值为“USA”的记录,我想加入JoinField2、JoinField3和JoinField4 目前,我只是使用不同的连接条件将表2两次连接到表1。但是,我希望避免这种情况,因为Table2有数亿行数据,并且我的查询在运行时遇到问题 有没有更有效

我有两个表(
Table1
Table2
)要加入,但是,加入标准因
Table1
Country
列中的数据而异

对于
Country
列中值为“UK”的所有记录,我想加入
JoinField1
JoinField2
JoinField3

对于
Country
列中所有值为“USA”的记录,我想加入
JoinField2
JoinField3
JoinField4

目前,我只是使用不同的连接条件将
表2
两次连接到
表1
。但是,我希望避免这种情况,因为
Table2
有数亿行数据,并且我的查询在运行时遇到问题

有没有更有效的方法来进行此连接? 请注意,我使用的是DB2SQL,不能在查询中使用函数


您可以将其表示为:

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) 
        );

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

使您的数据模型正常化。我希望:)。在我工作的公司里不太可能。以前从未在联接中使用OR。我想我只需要做一个基本的性能测试,看看哪种方法效果更好。