为什么delete语句比select语句有更多的限制?
我没有被困住,因为这个问题很容易解决,但我宁愿修正我的理解,而不是继续使用变通方法。
举个例子,我有一个带有字段V1和V2的无向边缘列表。不幸的是,在创建表时,我引入了重复项(即V1 -> V2和V2 -> V1)。为了识别dups,我运行了以下查询:
SELECT t1.V1, t1.V2
FROM table t1
WHERE t1.V1 > t1.V2
and EXISTS (
SELECT *
FROM table t2
WHERE t2.V1 = t1.V2
and t2.V2 = t1.V1 )因为这从表中返回了一组很好的行,所以我认为我应该能够用delete替换select行,并重新运行相同的查询。然而,Sql server却很生气,给了我红色的字母。一次是关于语法,另一次是关于绑定多部分标识符。
我设法将select存储在一个表变量中,并完成删除操作--这是可以的,但我最初的方法有什么问题,我能用一条SQL语句完成这项工作吗?
发布于 2013-04-30 02:01:50
SQL Server使用delete相当灵活。无论select在哪里,都可以使用double from语法:
DELETE FROM t1
FROM table t1
WHERE t1.V1 > t1.V2
and EXISTS (
SELECT *
FROM table t2
WHERE t2.V1 = t1.V2
and t2.V2 = t1.V1 )发布于 2013-04-30 01:55:51
我认为你需要类似这样的语法;
delete from yourTable
where v1 in
(select v1
from etc
) https://stackoverflow.com/questions/16285034
复制相似问题