有一个吗?我正在研究一些存储过程,并且在一个地方找到了以下行:
DELETE BI_Appointments WHERE VisitType != ( SELECT TOP 1 CheckupType FROM BI_Settings WHERE DoctorName = @DoctorName)
这样做是否与以下操作相同:
DELETE FROM BI_Appointments WHERE VisitType != ( SELECT TOP 1 CheckupType FROM BI_Settings WHERE DoctorName = @DoctorName)
还是语法错误,还是完全不同的东西?
假设这是T-SQL或MS SQL Server,则没有区别,并且语句相同。第一个FROM关键字在DELETE语句中在语法上是可选的。
FROM
DELETE
http://technet.microsoft.com/zh- CN/library/ms189835.aspx
关键字是可选的,原因有两个。
首先,该标准要求FROM在子句中使用关键字,因此必须遵守该关键字才能符合标准。
其次,尽管关键字是多余的,但这可能不是为什么它是可选的。我相信这是因为SQL Server允许您JOIN在DELETE语句中指定a ,而将第一个FROM强制性设置变为笨拙。
JOIN
例如,这是一个普通的删除操作:
DELETE FROM Employee WHERE ID = @value
可以简化为:
DELETE Employee WHERE ID = @value
SQL Server允许您基于另一个表删除带有JOIN:
DELETE Employee FROM Employee JOIN Site ON Employee.SiteID = Site.ID WHERE Site.Status = 'Closed'
如果第一个FROM关键字不是可选的,则上面的第二个查询将看起来像这样:
DELETE FROM Employee FROM Employee JOIN Site ON Employee.SiteID = Site.ID WHERE Site.Status = 'Closed'
上面的查询完全有效并且可以执行,但是它是一个非常尴尬的查询。很难说这是一个查询。看起来由于“重复”FROM子句,两个人混在一起了。
注意:由于没有ORDER BY子句,因此示例子查询可能不确定。
ORDER BY