如何只从表中删除记录?

时间:2012-08-10 15:20:05

标签: sql sql-server sql-server-2008

我的数据库中有一个表

              Id        Name
    -------------------------
      1        1          a
      2        1          a
      3        1          a
      4        2          b
      5        2          b
      6        2          b

这是我的数据库表,它有6行和2列Id和Name

在此表中,字段Id不是主键,我想从id字段表中删除2个数字行

删除2行表后我想要输出

               Id        Name
    -------------------------
      1        1          a
      3        1          a
      4        2          b
      5        2          b
      6        2          b  

有可能吗?

2 个答案:

答案 0 :(得分:4)

您的ID应该是唯一的,但这里是删除所有2的ID的SQL。

Delete FROM table WHERE table.Id=2;

将'table'替换为您的表名。

修改 看起来您想要删除第二个结果。我不知道为什么,但这里是sql:

with rn AS
(
  SELECT *, rn = ROW_NUMBER() OVER (ORDER BY (SELECT 0))
  FROM table  
)
DELETE
FROM rn
WHERE rn = 2

答案 1 :(得分:2)

表中必须有一些标准可用于标识其行。这是主键。怎么知道行的顺序保持不变?您的表甚至不可排序,我的意思是您不能确定相同的SELECT语句以相同的顺序返回行。

这就是为什么我会回答你不能只删除并准确记录第二,因为你的表中没有订单。一个SELECT会在第二个位置产生不同的行。

如果Id字段必须包含此类值,可能您可以添加代理主键。