我不确定这是否是 SQL Server 2012 中的错误。
我有一个简单的查询:
DELETE
FROM TABLE1
FROM TABLE2
WHERE TABLE1.COL1 = 1
在SSMS中,这段代码解析没有错误,并从Table1
没有错误或警告。我的预期是 SQL Server 会因为多个 FROM 语句而不使用子查询语法而引发错误。
在语法中DELETE
, 首先FROM
子句指定要删除哪个表。实际的关键字FROM
是可选的。
第二FROM
如果需要联合删除可以指定,所以它的功能与FROM
in a SELECT
。在这样的查询中,第一个FROM
然后指定在馈送连接行时从哪个连接表中删除行。
然而,如果有些含糊的话,在第一个中指定一个表也是有效的。FROM
这是not出现在第二个FROM
。这有效地导致了两个子句之间的交叉连接。没有任何进一步的WHERE
子句,它将删除表中的所有行。
在您的查询中,您有
DELETE
FROM TABLE1 -- table to delete rows from
FROM TABLE2 -- cross-join all these rows
WHERE TABLE1.COL1 = 1 -- filtering
So TABLE2
是交叉连接的,然后完全被忽略。
通常是一个加入DELETE
应该看起来像这样:
DELETE FROM t1 -- should use alias here
FROM TABLE2 t2
JOIN TABLE1 t1 ON some_join_condition -- normal join
WHERE t1.COL1 = 1 -- other filtering
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)