有吗?我正在研究一些存储过程,在一个地方我找到了以下行:
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
语句中在语法上是可选的。
http://technet.microsoft.com/en-us/library/ms189835.aspx
关键字是可选的,原因有两个。
首先,该标准要求条款中的FROM
关键字,因此必须符合标准。
其次,虽然关键字是多余的,但这可能不是为什么它是可选的。我相信这是因为SQL Server允许你在JOIN
语句中指定DELETE
,并使第一个FROM
强制使它变得尴尬。
例如,这是一个普通的删除:
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
子句,您的示例子查询可能是不确定的。
嗨朋友在oracle数据库中删除和删除没有区别,它是可选的,但这是编写像DELETE FROM table [ WHERE condition ]
这样的代码的标准,这是sql-92标准。始终以标准方式开发代码。