为什么删除语句有超出其选择对应项的限制?
我没有被卡住,因为问题很容易解决,但我宁愿修复我的理解而不是继续使用变通办法。
例如,我有一个无向的边缘列表,其中包含字段V1和V2。不幸的是,在创建表时,我引入了重复项(即V1 - > V2和V2 - > V1)。为了识别重复,我运行了查询:
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语句完成它吗?
答案 0 :(得分:4)
SQL Server与delete
相当灵活。在from
的任何地方都允许使用双select
语法:
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 )
答案 1 :(得分:1)
我认为你需要类似这样的语法;
delete from yourTable
where v1 in
(select v1
from etc
)