首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >复杂的Delete SQL语句

问复杂的Delete SQL语句
EN

Stack Overflow用户
提问于 2013-04-30 01:47:29
回答 2查看 3.5K关注 0票数 1

为什么delete语句比select语句有更多的限制?

我没有被困住,因为这个问题很容易解决,但我宁愿修正我的理解,而不是继续使用变通方法。

举个例子,我有一个带有字段V1和V2的无向边缘列表。不幸的是,在创建表时,我引入了重复项(即V1 -> V2和V2 -> V1)。为了识别dups,我运行了以下查询:

代码语言:javascript
复制
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语句完成这项工作吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-04-30 02:01:50

SQL Server使用delete相当灵活。无论select在哪里,都可以使用double from语法:

代码语言:javascript
复制
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 )
票数 4
EN

Stack Overflow用户

发布于 2013-04-30 01:55:51

我认为你需要类似这样的语法;

代码语言:javascript
复制
delete from yourTable
where v1 in 
(select v1
 from etc
) 
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16285034

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档