web-dev-qa-db-fra.com

Suppression SQL d'enregistrements dans une plage spécifique

C'est probablement une question très simple pour quelqu'un qui a de l'expérience, mais je voulais simplement connaître le moyen le plus sûr de supprimer quelques centaines d'enregistrements d'une table SQL situés dans une plage spécifique.

Par exemple, je dois supprimer les lignes dont l'identifiant est compris entre 79 et 296:

Mon souci est que si je disais tout supprimer avec un identifiant (> 79 ET <296), alors il pourrait littéralement effacer toute la table.

40
user964769

si vous utilisez SQL Server

delete from Table where id between 79 and 296

Après votre modification: vous avez maintenant clarifié que tu veux :

ID (>79 AND < 296)

Alors utilisez ceci:

delete from Table where id > 79 and id < 296

104
Royi Namir

Vous avez donné un ID de condition (> 79 et <296), alors la réponse est:

delete from tab
where id > 79 and id < 296

c'est pareil que:

delete from tab
where id between 80 and 295

si id est un entier.

Tous ont répondu:

delete from tab
where id between 79 and 296

c'est pareil que:

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

Attention à la différence.

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

Vous pouvez utiliser cette méthode car id ne peut pas être séquentiel dans tous les cas.

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

Si vous l'écrivez comme suit dans le serveur SQL, vous ne risquez pas d'effacer la table de la base de données à moins que toutes les valeurs de cette table ne se trouvent réellement entre ces valeurs:

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

Mon souci est que si je dis supprimer evertything avec un ID (> 79 ET <296), alors il pourrait littéralement effacer toute la table ...

Cela n'arrivera pas parce que vous aurez une clause where. Qu'est-ce qui se passe est que, si vous avez une déclaration comme delete * from Table1 where id between 70 and 1296, la première chose que fera le processeur de requêtes SQL consiste à analyser la table et à rechercher les enregistrements de cette plage, puis à appliquer une suppression.

0
lloydom

vous pouvez aussi simplement changer votre suppression en select *

et tester votre sélection

les enregistrements sélectionnés seront les mêmes que ceux supprimés

vous pouvez également encapsuler votre déclaration dans un début/une annulation si vous n’êtes pas sûr - testez l’instruction puis, si tout va bien, supprimez la restauration.

par exemple

SELECT * FROM table où ID entre 79 et 296

montrera tous les enregistrements correspondant au où si ce sont les veut que vous 'voulez' vraiment supprimer puis utilisez

SUPPRIMER DE LA table OERE id entre 79 et 296

Vous pouvez également créer un déclencheur/qui intercepte les suppressions et les place dans une table d'historique.

donc si vous supprimez quelque chose par erreur, vous pouvez toujours le récupérer

(gardez vos enregistrements de la table d'historique pas plus vieux que 6 mois ou tout ce que les règles d'affaires disent

0
TheTiger