Reputation: 1420
I am a Linux admin with only basic knowledge in Mysql Queries
I want to delete many table entries which are ip address from my table using id,
currently i am using
DELETE from tablename where id=1;
DELETE from tablename where id=2;
but i have to delete 254 entries,so this method is going to take hours,how can i tell mysql to delete rows that i specify,coz i want to skip deleting some entries out of this 254.
Deleting whole table and importing needed entries is not an option.
Upvotes: 91
Views: 259907
Reputation: 59
All responses are good but have one big wrong assumption that id is a number type. You must know column type in where deleting is performing. If this is a CHAR TYPE or similar string, You must ADD " like this:
DELETE from tablename WHERE id IN ("str1", "str2", "text",..., "string" );
In other case query will not perform and will return false.
Upvotes: 1
Reputation: 19
DELETE FROM tablename WHERE id > 0;
OR
DELETE FROM tablename WHERE id <255;
It deletes id from 1 to 254
Upvotes: 0
Reputation:
Hope it helps:
DELETE FROM tablename
WHERE tablename.id = ANY (SELECT id FROM tablename WHERE id = id);
Upvotes: 2
Reputation: 6873
The best way is to use IN
statement :
DELETE from tablename WHERE id IN (1,2,3,...,254);
You can also use BETWEEN
if you have consecutive IDs :
DELETE from tablename WHERE id BETWEEN 1 AND 254;
You can of course limit for some IDs using other WHERE clause :
DELETE from tablename WHERE id BETWEEN 1 AND 254 AND id<>10;
Upvotes: 228
Reputation: 381
If you have some 'condition' in your data to figure out the 254 ids, you could use:
delete from tablename
where id in
(select id from tablename where <your-condition>)
or simply:
delete from tablename where <your-condition>
Simply hard coding the 254 values of id column would be very tough in any case.
Upvotes: 7
Reputation: 61198
Others have suggested IN
, this is fine. You can also use a range:
DELETE from tablename where id<254 and id>3;
If the ids to delete are contiguous.
Upvotes: 4
Reputation: 2332
if you need to keep only a few rows, consider
DELETE FROM tablename WHERE id NOT IN (5,124,221);
This will keep only some records and discard others.
Upvotes: 7
Reputation: 8664
Use IN
Clause
DELETE from tablename where id IN (1,2);
OR you can merge the use of BETWEEN
and NOT IN
to decrease the numbers you have to mention.
DELETE from tablename
where (id BETWEEN 1 AND 255)
AND (id NOT IN (254));
Upvotes: 3
Reputation: 24354
Something like this might make it a bit easier, you could obviously use a script to generate this, or even excel
DELETE FROM tablename WHERE id IN (
1,
2,
3,
4,
5,
6
);
Upvotes: 5
Reputation: 263933
how about using IN
DELETE FROM tableName
WHERE ID IN (1,2) -- add as many ID as you want.
Upvotes: 10