2014-01-16 21 views
1

什麼是在where子句中使用OR條件的更有效的替代方法?SQL的替代方案其中條件與OR

Update X 
set 
x.col1 = y.col1, 
x.col2 = y.col2, 
x.col3 = y.col3, 
x.col4 = y.col4 
from x 
join y 
on x.ID = y.ID 
WHERE 
x.col1 <> y.col1 OR 
x.col2 <> y.col2 OR 
x.col3 <> y.col3 OR 
x.col4 <> y.col4 
+0

@Denis:爲什麼?看起來合法。內部加入一個ON。 –

+0

@Denis:這是正確的。 'x'沒有連接到'x'。 'UPDATE x'只是指下面的'from x'。 –

+1

@Kristen Oddo:你的表現擔憂在哪裏?它可能取決於表格模式和索引的位置。否則,它看起來很正常(儘管這是一個非常普遍的問題)。 –

回答

0

只要有關於表鎖等沒有其他性能問題或業務規則,那麼這是寫這個簡單的例子,正確的方法。匿名列出了可能會或可能不會更好的替代方案。性能調優需要系統中所有不同移動組件的知識,而不僅僅是一個簡單的語句,所以爲了獲得進一步的幫助,我們需要關於表模式和這些表上的索引的詳細信息。

0

的替代選項:

Update X 
set 
    x.col1 = y.col1, 
    x.col2 = y.col2, 
    x.col3 = y.col3, 
    x.col4 = y.col4 
from x 
INNER join (
    SELECT id,col1,col2,col3,col4 FROM y 
    EXCEPT 
    SELECT id,col1,col2,col3,col4 FROM x 
) y ON y.id = x.id