这两个查询的写作风格有什么不同?

时间:2015-05-15 09:15:07

标签: sql sql-server sql-delete sqlperformance

我正在使用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

两个查询的区别在于首先写入任一表格列的连接条件。

我应该如何确定哪种方法有效或正确?

2 个答案:

答案 0 :(得分:4)

相等=运算符是syme​​tric。翻转操作数的顺序不会产生任何功能或性能影响。

另一方面,大于(>)运算符当然不是syme​​rtic。 p.date>cte.datecte.date>p.date在功能上有所不同,您应根据业务逻辑选择正确的,而不管性能如何。无论delete语句运行得多快,如果它删除了错误的东西,它就没用了(更不用说对了有害的)。

答案 1 :(得分:1)

使用 =运算符: 你可以写条件=的任何一方保持不变 喜欢  **A=B or B=A**。两者都会给出相同的结果。

<强>&LT;,&GT;比较运算符:&#39;

当我们比较对方时会得到不同的结果

A<B and B<A类似,两个输出都不同。

结论:根据您的业务需求,您可以选择第一个或第二个选项。使用CTE将始终提升效果