有吗?我正在研究一些存储过程,在一个地方我找到了以下行:
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)
或者它是语法错误,还是完全不同的东西?
答案 0 :(得分:22)
假设这是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
子句,您的示例子查询可能是不确定的。
答案 1 :(得分:-1)
嗨朋友在oracle数据库中删除和删除没有区别,它是可选的,但这是编写这样的代码的标准
DELETE FROM table [ WHERE condition ]
这是sql-92标准。始终以标准方式开发代码。