从表中删除一个具有多个相似项目的项目

时间:2013-01-27 19:04:49

标签: c# asp.net sql tsql sql-server-2008-r2

我想知道,如果我可以执行此类操作。我在表格中有以下数据安排:

id SessionId P_Name P_TypeId
1  abc        XYZ   5
2  abc        XYZ   5
3  abc        XYZ   5
4  abc        XYZ   5
5  abc        XYZ   5
6  abc        XYZ   5
7  abc        XYZ   5  
8  abc        XYZ   5

这里我有8个类似的项目,但有独特的ID。

条件:

从前端我将传递[P_TypeId] = 5,然后查询将使用delete语句从表中删除一个项目。 这可能吗?

3 个答案:

答案 0 :(得分:3)

是的,例如使用ROW_NUMBER

WITH x 
     AS (SELECT id, 
                sessionid, 
                p_name, 
                p_typeid, 
                RN = Row_number() 
                       OVER( 
                         partition BY sessionid, p_name, p_typeid 
                         ORDER BY id) 
         FROM   dbo.tablename
         WHERE P_TypeId = @P_TypeId ) 
DELETE x 
WHERE  rn = 1 

删除每个组的最低ID。

DEMO

答案 1 :(得分:2)

delete top(1) from mytable where p_typeid = 5

以上将删除包含p_typeid为5的一行。

如果要删除ID最低的行,请尝试

 with t as (
   select top(1) * from mytable where p_typeid = 5
   order by id
 )
 delete from t

答案 2 :(得分:0)

你可以这样做:

delete from dbo.your_tablename 
where id = (select top 1 id from dbo.your_tablename where P_TypeId = 5)

虽然感觉有点像黑客。

正如其他答案所做的那样,如果需要,您还可以在where查询中添加select top...子句。