我试图在我的联接中使用多个列,如下所示:
FROM Table1 t
INNER JOIN Table2 s ON t.number = s.number OR t.letter = s.letter
这两个表都有数十万行数据,并且无限运行。
有什么想法吗?
答案 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