0

そのような操作ができるかどうか知りたいです。テーブルには次のデータ配置があります。

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ステートメントを使用してテーブルから1つのアイテムのみを削除します。これは可能ですか?

4

3 に答える 3

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 を削除します。

デモ

于 2013-01-27T19:07:37.370 に答える
2
delete top(1) from mytable where p_typeid = 5

上記は、5 の p_typeid を含む 1 つの行を削除します。

最も低いIDの行を削除したい場合は、試してください

 with t as (
   select top(1) * from mytable where p_typeid = 5
   order by id
 )
 delete from t
于 2013-01-27T19:11:17.153 に答える
0

あなたはこれを行うことができます:

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

しかし、少しハックのように感じます。

他の回答が行ったように、必要に応じてクエリにwhere句を追加することもできます。select top...

于 2013-01-27T19:12:09.647 に答える