加入一列,如果没有匹配则加入另一列

时间:2016-02-26 20:14:58

标签: sql tsql join

我试图在我的联接中使用多个列,如下所示:

FROM Table1 t
INNER JOIN Table2 s ON t.number = s.number OR t.letter = s.letter

这两个表都有数十万行数据,并且无限运行。

有什么想法吗?

3 个答案:

答案 0 :(得分:3)

一种可能性是使用left join并修复查询的其余部分:

FROM Table1 t LEFT JOIN
     Table2 sn
     ON t.number = sn.number LEFT JOIN
     Table2 sl
     ON t.letter = sl.letter and sn.number is null

为了提高性能,您需要Table2(number)Table2(letter)上的索引。

答案 1 :(得分:2)

你的意思是:

FROM Table1 t
INNER JOIN Table2 s ON case
  when t.number = s.number then 1
  when t.letter = s.letter then 1
  else 0 end = 1

第一个匹配条件获胜。

答案 2 :(得分:0)

OR通常会产生不良表现。我会去:

SELECT *
FROM Table1 t
       INNER JOIN Table2 s ON t.number = s.number 
UNION
SELECT *
FROM Table1 t
     INNER JOIN Table2 s ON t.letter = s.letter