2015-05-15 103 views
-3

我使用MS SQL Server 2012中:這兩個查詢的寫作風格有什麼區別?

這兩個查詢是:

1:

with cte as 
(

<some code> 
) 
delete p from table p join cte on p.id=cte.id 
and p.date>cte.date 

2:

with cte as 
(

<some code> 
) 
delete p from table p join cte on cte.id=p.id 
and cte.date>p.date 

在兩個查詢的差異寫加盟任何一個表格列的條件首先。

我應該如何決定哪個是有效的或正確的?

+9

'p.date> cte.date'和'cte.date> p.date'是兩個完全不同的東西 –

+0

你的意思是'cte.date artm

回答

4

的平等=操作是對稱的。翻轉操作數的順序沒有任何功能或性能影響。

大於(>)運算符,在另一方面,是,當然,不symertic。 p.date>cte.datecte.date>p.date在功能上有所不同,您應根據業務邏輯選擇正確的一個,而不考慮性能。不管delete聲明的運行速度有多快,如果它刪除了錯誤的東西,這是非常無用的(更不用說降低正確的危害)。

+0

注意p.date> cte.date和cte.date> p.date –

+0

@GiorgiNakeuri剛注意到我自己,並修改了我的答案。謝謝! – Mureinik

1

使用=操作員: u能寫狀態的任一側=保持相同 等 **A=B or B=A**。兩者都會得到相同的結果。

<,>比較運算符:'

該宏將會使不同的結果,當我們比較相對側

A<B and B<A兩個輸出是不同的。

結論:它是您的選擇根據您的業務需求選擇第一個或第二個選項。 使用CTE將始終提升性能