仅从包含多个类似项目的表中删除一个项目

本文关键字:项目 一个 删除 包含多 | 更新日期: 2023-09-27 17:56:09

我想知道,我是否可以执行这样的操作。我在表中有以下数据排列:

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 语句仅从表中删除一个项目。这可能吗?

仅从包含多个类似项目的表中删除一个项目

是的,例如使用 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。

演示

delete top(1) from mytable where p_typeid = 5

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

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

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

这样做:

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

感觉有点黑客。

与其他答案一样,如果需要,您还可以向select top...查询添加 where 子句。

相关文章: