我想知道,如果我可以执行此类操作。我在表格中有以下数据安排:
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语句从表中删除一个项目。 这可能吗?
答案 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。
答案 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...
子句。