sql-server - 我们可以使用 Group by 子句执行像删除这样的 DML 操作吗?

标签 sql-server t-sql

我们可以在 T-SQL 中使用 Group by 子句执行像删除这样的 DML 操作吗?

最佳答案

SELECT 语句 - http://msdn.microsoft.com/en-us/library/ms189499.aspx

DELETE 语句 - http://msdn.microsoft.com/en-us/library/ms189835.aspx

正如你所看到的,GROUP BY在SELECT中,但在DELETE中没有,所以你不能直接使用它。 INSERT 语句中也没有它。

[ WITH <common_table_expression> [ ,...n ] ]  
DELETE   
    [ TOP ( expression ) [ PERCENT ] ]   
    [ FROM ]   
    { <object> | rowset_function_limited   
      [ WITH ( <table_hint_limited> [ ...n ] ) ]  
    }  
    [ <OUTPUT Clause> ]  
    [ FROM <table_source> [ ,...n ] ]   
    [ WHERE { <search_condition>   
            | { [ CURRENT OF   
                   { { [ GLOBAL ] cursor_name }   
                       | cursor_variable_name   
                   }   
                ]  
              }  
            }   
    ]   
    [ OPTION ( <Query Hint> [ ,...n ] ) ]   
[; ]  

但是使用WHERE子句,或者子句,可以利用GROUP BY,比如

DELETE tbl
WHERE id NOT IN (select max(id) from tbl GROUP BY date_logged)

DELETE a
FROM tbl a
JOIN (select a_id from othertbl group by a_id having count(*) >= 3) b
    ON a.id = b.a_id

关于sql-server - 我们可以使用 Group by 子句执行像删除这样的 DML 操作吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5691076/

相关文章:

sql-server - 在一天中的特定时间之后 - 哪种方法更好?

sql-server - 配置 ADP 应用程序以使用不同的数据库...?

sql - BULK INSERT 0 受影响的行

sql - 如何根据测量之间的持续时间计算平均值?

sql - 如何在 SQL Server 中查询此输出

t-sql - 使用子查询结果作为查询变量

sql-server - 如何添加日期时间字段和时间字段

sql - 从 SQL Server 2008 生成 XML 文件

sql - 计算差异

t-sql - 临时表上的 SQL 约束