2015-05-15 85 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将始终提升性能