我有一个选择过程,在选择查询中我使用如下的连接。
select * from Table1 t1
Left join Table2 t2 on t1.ID = t2.ID
OR (t1.col1 = t2.col1
AND t1.col2 = t2.col2
AND t1.col3 = t2.col3
AND t2.ID IS NULL
)
此OR条件使插入过程非常慢。有没有其他方法可以让OR条件到另一个连接以使进程快速。
由于 [R
答案 0 :(得分:1)
OR条件通常会在某种程度上影响性能。你可以用这个:
Select * from table1 t1 Left Join table2 t2 on t1.ID = T2.ID
Union All
Select * from Table1 t1 Left Join Table2 t2 on t1.col1 = t2.col1 AND t1.col2 = t2.col2 and t1.col3 = t2.col3 AND t2.ID IS NULL
希望这会有所帮助!!
答案 1 :(得分:1)
嗯,是的,您可以使用第二个联接而不是OR
:
select * from Table1 t1
Left join Table2 t2 on t1.ID = t2.ID
left join table2 t3 on
(t1.col1 = t3.col1
AND t1.col2 = t3.col2
AND t1.col3 = t3.col3
AND t3.ID IS NULL
)
您在table2中插入的任何内容都需要与第二个别名合并(coalesce(t2.col1,t3.col1))。
现在,这是否会对你的表现做任何事情完全是另一个问题。
答案 2 :(得分:1)
您可以使用union all。注意第一个选择中的内连接 - 这使得两个选择真正互补于与原始中的任何OR条件匹配的记录。如果两者都失败,则Table1
中的相应记录将由第二个选择中的左连接保留。
select *
from Table1 t11
join Table2 t21 on ( t21.ID = t11.ID )
union all
select *
from Table1 t12
left join Table2 t22 on ( t22.ID IS NULL
AND t22.col1 = t12.col1
AND t22.col2 = t12.col2
AND t22.col3 = t12.col3
)
;