我正在使用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
两个查询的区别在于首先写入任一表格列的连接条件。
我应该如何确定哪种方法有效或正确?
答案 0 :(得分:4)
相等=
运算符是symetric。翻转操作数的顺序不会产生任何功能或性能影响。
另一方面,大于(>
)运算符当然不是symertic。 p.date>cte.date
和cte.date>p.date
在功能上有所不同,您应根据业务逻辑选择正确的,而不管性能如何。无论delete
语句运行得多快,如果它删除了错误的东西,它就没用了(更不用说对了有害的)。
答案 1 :(得分:1)
使用 =运算符:
你可以写条件=
的任何一方保持不变
喜欢
**A=B or B=A**
。两者都会给出相同的结果。
<强>&LT;,&GT;比较运算符:&#39;
当我们比较对方时会得到不同的结果
与A<B and B<A
类似,两个输出都不同。
结论:根据您的业务需求,您可以选择第一个或第二个选项。使用CTE将始终提升效果。