web-dev-qa-db-ja.com

特定の範囲内のSQL Delete Records

これはおそらく経験のある人にとっては非常に簡単な質問ですが、特定の範囲に収まるSQLテーブル内の数百のレコードを削除する最も安全な方法を知りたいだけです。

たとえば、79〜296のIDを持つ行を削除する必要があります。

私の心配は、ID(> 79 AND <296)を持つすべてを削除すると言うと、文字通りテーブル全体を消去する可能性があることです。

40
user964769

sql Serverを使用する場合

_delete from Table where id between 79 and 296
_

After編集:あなたがしたいこと :

ID (>79 AND < 296)

だからこれを使用する:

_delete from Table where id > 79 and id < 296_

104
Royi Namir

条件ID(> 79および<296)を指定すると、答えは次のとおりです。

delete from tab
where id > 79 and id < 296

これは次と同じです:

delete from tab
where id between 80 and 295

idが整数の場合。

すべての回答:

delete from tab
where id between 79 and 296

これは次と同じです:

delete from tab
where id => 79 and id <= 296

違いに注意してください。

8
Michał Powaga
DELETE FROM table_name 
WHERE id BETWEEN 79 AND 296;
1
yosh

Idはすべての場合に連続することができないため、この方法を使用できます。

SELECT * 
FROM  `ht_news` 
LIMIT 0 , 30
0
Ali

SQLサーバーで次のように記述した場合、そのテーブル内のすべての値が実際にそれらの値の間にある場合を除き、データベーステーブルを消去する危険はありません。

DELETE FROM [dbo].[TableName] WHERE [TableName].[IdField] BETWEEN 79 AND 296 
0
CSharpened

私の心配は、ID(> 79 AND <296)ですべてを削除すると言うと、文字通りテーブル全体を消去する可能性があることです...

Where句があるので、それは起こりません。何が起こるかというと、delete * from Table1 where id between 70 and 1296、SQLクエリプロセッサが最初に行うことは、テーブルをスキャンしてその範囲内のレコードを探し、削除を適用することです。

0
lloydom

削除を選択に変更することもできます*

そしてあなたの選択をテストします

選択されたレコードは削除されたものと同じです

わからない場合は、ステートメントを開始/ロールバックでラップすることもできます-ステートメントをテストしてから、すべてがうまくいけばロールバックを削除します

例えば

SELECT * FROMテーブルWHERE id BETWEEN 79 AND 296

「本当に」削除したい場合は、使用する場所に一致するすべてのレコードが表示されます

79と296の間のテーブルWHERE IDから削除

トリガーを作成することもできます。トリガーは、削除をキャッチして履歴テーブルに入れます

誤って削除した場合は、いつでも元に戻すことができます

(履歴テーブルの記録は、6か月またはその他のビジネスルールに記載されているよりも古いものではありません)

0
TheTiger