MySQL में IN ऑपरेटर का उपयोग करके एक ही DELETE स्टेटमेंट में कई ID की पंक्तियां हटाएं।
सिंटैक्स
DELETE FROM yourTableName WHERE yourColumnName IN (value1, value2, ..., valueN);
उदाहरण
टेबल बनाना
mysql> create table DeleteManyRows ( -> Id int, -> Name varchar(200), -> Age int -> ); Query OK, 0 rows affected (3.35 sec)
रिकॉर्ड डालना
mysql> insert into DeleteManyRows values(1,'John',23); mysql> insert into DeleteManyRows values(2,'Johnson',22); mysql> insert into DeleteManyRows values(3,'Sam',20); mysql> insert into DeleteManyRows values(4,'David',26); mysql> insert into DeleteManyRows values(5,'Carol',21); mysql> insert into DeleteManyRows values(6,'Smith',29);
हटाने से पहले
mysql> select *from DeleteManyRows;
+------+---------+------+ | Id | Name | Age | +------+---------+------+ | 1 | John | 23 | | 2 | Johnson | 22 | | 3 | Sam | 20 | | 4 | David | 26 | | 5 | Carol | 21 | | 6 | Smith | 29 | +------+---------+------+
ID 1,2,3,4 हटाना
mysql> delete from DeleteManyRows where Id in(1,2,3,4); Query OK, 4 rows affected (0.25 sec)
हटाने के बाद
mysql> select *from DeleteManyRows;
+------+-------+------+ | Id | Name | Age | +------+-------+------+ | 5 | Carol | 21 | | 6 | Smith | 29 | +------+-------+------+
सबक्वेरी के साथ IN
-- अन्य टेबल के आधार पर हटाना DELETE FROM orders WHERE customer_id IN (SELECT id FROM customers WHERE status = 'banned'); -- CTE के साथ (MySQL 8.0+) WITH to_delete AS (SELECT id FROM logs WHERE created < DATE_SUB(NOW(), INTERVAL 1 YEAR)) DELETE FROM logs WHERE id IN (SELECT id FROM to_delete);
बड़े IN लिस्ट के लिए विकल्प
-- 1000+ मानों के लिए JOIN बेहतर DELETE t FROM target_table t JOIN (SELECT 1 AS id UNION SELECT 2 UNION SELECT 3 ...) ids ON t.id = ids.id; -- या अस्थायी टेबल CREATE TEMPORARY TABLE temp_ids (id INT PRIMARY KEY); INSERT INTO temp_ids VALUES (1),(2),(3),...; DELETE t FROM target_table t JOIN temp_ids ON t.id = temp_ids.id;
सावधानियां
INलिस्ट बहुत बड़ी होने पर प्रदर्शन प्रभावित हो सकता है- सदा
WHEREक्लॉज उपयोग करें — बिना WHERE के DELETE सभी पंक्तियां हटा देगा - ट्रांजैक्शन में लपेटें यदि रोलबैक आवश्यक हो
- विदेशी कुंजी कंस्ट्रेंट जांचें (ON DELETE CASCADE/RESTRICT)