0

データベースに 1 つのテーブルがあります

              Id        Name
    -------------------------
      1        1          a
      2        1          a
      3        1          a
      4        2          b
      5        2          b
      6        2          b

このデータベース テーブルには、6 行と 2 列の Id と Name があります

このテーブルのフィールドは主キーではなく、byフィールド テーブルIdから 2 つの数値行を削除したいid

テーブルの2行を削除した後、このような出力が必要です

               Id        Name
    -------------------------
      1        1          a
      3        1          a
      4        2          b
      5        2          b
      6        2          b  

出来ますか?

4

2 に答える 2

4

IDは一意である必要がありますが、2であるすべてのIDを削除するSQLは次のとおりです。

Delete FROM table WHERE table.Id=2;

'table'をテーブル名に置き換えます。

編集: 2番目の結果を削除したいようです。理由はわかりませんが、SQLは次のとおりです。

with rn AS
(
  SELECT *, rn = ROW_NUMBER() OVER (ORDER BY (SELECT 0))
  FROM table  
)
DELETE
FROM rn
WHERE rn = 2
于 2012-08-10T15:26:43.727 に答える
2

テーブルには、その行を識別するためのいくつかの基準が必要です。それが主キーです。行の順序が同じであることをどのように知ることができますか? あなたのテーブルはソート可能ではありません。つまり、同じ SELECT ステートメントが同じ順序で行を返すことを確認できないということです。

そのため、テーブルに順序がないため、2番目だけを削除して正確に記録することはできないと答えます。そして、1 つの SELECT は、2 番目の位置に異なる行をもたらします。

Id フィールドにそのような値が必要な場合は、おそらく代理主キーを追加できます。

于 2012-08-13T05:50:19.663 に答える