比方说,我有两个表:性能与连接或
Table A
ProdID | PartNumber | Data...
1 | ABC-a | "Data A"
2 | (null) | "Data B"
3 | ABC-c | "Data C"
...
和
Table B
ProdID | PartNumber | DataB
(null) | ABC-a | "Data D"
2 | (null) | "Data E"
3 | (null) | "Data F"
(null) | ABC-z | "Data G"
...
不理想,但无论如何。我想
ProdID | PartNumber | Data | DataB...
1 | ABC-a | "Data A" | "Data D"
2 | (null) | "Data B" | "Data E"
3 | ABC-c | "Data C" | "Data F"
(null) | ABC-z | (null) | "Data G"
于是我就用
SELECT *
FROM Table1 T1
RIGHT JOIN Table2 T2 ON
T1.ProdID = T2.ProdID OR T1.PartNumber = T2.PartNumber
这不正是我想要的东西,但似乎只要把约100倍的或单独两侧。作为更复杂查询的一部分,OR
需要2分钟,<需要1秒,int
需要1秒,nvarchar(50)
需要1秒。表“A”具有〜13k行,表“b”具有〜35k并且整个查询返回〜40k。
查询计划
我觉得这个 “表后台打印” 可能是问题。
SQL Server 2008 R2 Express。思考?
您的结果与您的源数据不匹配,因为TableA和TableB都有一个ProdID 4,但该记录的结果显示为空ProdID。如果其中一个源表有空,或者结果是否有prodID 4? –
我已经更新了示例,希望更清楚。 – Fowl
Gee很好的例子很难! – Fowl