Yar*_*lav 6 sql-server delete t-sql
BOL 和许多其他来源指出:
FROM
是一个可选关键字,可以在 DELETE 关键字和目标 table_or_view_name 或 rowset_function_limited 之间使用。
我习惯写DELETE
没有FROM
. 我进行了一些搜索,但找不到FROM
强制性的地方。任何人都可以指出应该强制执行的情况吗?还是总是可选的?
Aar*_*and 14
这是一种情况,如果没有,就很难编写它:
DELETE /* FROM */ t1 -- this FROM is optional
FROM dbo.t1 -- this FROM is mandatory
INNER JOIN dbo.t2 AS t2
ON t1.key = t2.key
WHERE t2.key IN (1,2,3);
Run Code Online (Sandbox Code Playgroud)
或者:
DELETE /* FROM */ t1 -- this FROM is optional
FROM dbo.t1 -- this FROM is mandatory
WHERE EXISTS
(
SELECT 1 FROM dbo.t2
WHERE key IN (1,2,3)
AND key = t1.key
);
Run Code Online (Sandbox Code Playgroud)
将FROM
在初始地点(例如DELETE **FROM** t1 FROM dbo.t1 ...
)是可选的,就像联机丛书说。为什么你认为它应该是强制性的?借用托马斯的回答,他优雅地删除了,以下是相同的:
DELETE Sales.SalesOrderDetail WHERE SalesOrderID = -1;
DELETE FROM Sales.SalesOrderDetail WHERE SalesOrderID = -1;
Run Code Online (Sandbox Code Playgroud)
这类似于INSERT
- 以下内容绝对 100% 等效,您无需编写INTO
:
INSERT dbo.t1(key) VALUES(1),(2),(3);
INSERT INTO dbo.t1(key) VALUES(1),(2),(3);
Run Code Online (Sandbox Code Playgroud)