仅从包含多个类似项目的表中删除一个项目
本文关键字:项目 一个 删除 包含多 | 更新日期: 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
子句。