sql - 如果返回超过 1 个 MS SQL,则删除

标签 sql sql-server azure

如果行数超过 1,我需要删除行。为什么它不起作用?

if
    (SELECT count(*)
FROM Table1 where Name = 'TEST')

RETURN (2)

BEGIN
    DELETE MIN(Id) FROM Table1 where Name = 'TEST'
END

最佳答案

你的语法完全错误。您不能从表达式中删除;您从表中删除。

您可以使用窗口函数和可更新的 CTE 来执行您想要的操作。如果您想删除一行的所有个副本,请使用count(*):

with todelete as (
      select t1.*,
             count(*) over (partition by t1.name) as cnt
      from table1 t1
      where Name = 'TEST'
     )
delete from todelete
    where cnt > 1;

我猜测您实际上想要保留具有最小id的行。在这种情况下,请使用 row_number():

with todelete as (
      select t1.*,
             row_number() over (partition by t1.name order by t1.id) as seqnum
      from table1 t1
      where Name = 'TEST'
     )
delete from todelete
    where seqnum > 1;

关于sql - 如果返回超过 1 个 MS SQL,则删除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58096099/

相关文章:

mySQL 查询计数不同和百分比

sql - 如何将 ROW_NUMBER() 分配给一列?

MYSQL在1个查询中获取2个日期之间的总和和总和

SQL:删除值已存在的行

c# - 如何使用 azure.security.keyvault 中的新 keyvault 客户端进行签名

c# - Azure 通知中心注册模板 xml 无效

java.sql.Connection 隔离级别

SQL 每月总结

sql - 使用SQL Server将一个主表分成多个表

windows - 获得有关无法部署的 Windows Azure Web 角色的反馈?