Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> MySQL

MySQL में IN क्लॉज से एकाधिक पंक्तियां कैसे हटाएं?


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)

  1. - MySQL में शर्त के आधार पर केवल कुछ पंक्तियां कैसे हटाएं?

    MySQL में DELETE स्टेटमेंट के WHERE क्लॉज का उपयोग करके शर्त के आधार पर केवल विशिष्ट पंक्तियों को हटाया जा सकता है। सिंटैक्स DELETE FROM table_name WHERE condition; उदाहरण तालिका बनाएं: mysql> CREATE TABLE DemoTable (Id INT, Name VARCHAR(20)); mysql> INSERT INTO DemoTable VALUES (100, Bob),

  1. - MySQL में INSERT INTO SELECT से एक टेबल से दूसरी टेबल में पंक्तियाँ कॉपी करें

    INSERT INTO ... SELECT स्टेटमेंट का उपयोग करके एक टेबल से दूसरी टेबल में पंक्तियाँ कॉपी करें (शर्त के साथ)। स्रोत टेबल mysql> CREATE TABLE DemoTable1879 (Id INT, Name VARCHAR(20)); mysql> INSERT INTO DemoTable1879 VALUES(101, Chris Brown), (102, David Miller), (103, Adam Smith); लक्ष्य टेबल

  1. - MySQL में IN() क्लॉज़ के साथ एक क्वेरी में रिकॉर्ड कैसे डिलीट करें?

    MySQL में एक ही क्वेरी में एकाधिक विशिष्ट रिकॉर्ड डिलीट करने के लिए, DELETE स्टेटमेंट के साथ IN() ऑपरेटर का उपयोग करें। यह एकाधिक DELETE स्टेटमेंट चलाने से अधिक कुशल और पठनीय है। उदाहरण: विशिष्ट StudentId वाले रिकॉर्ड डिलीट करना डेमो टेबल बनाएं: mysql> CREATE TABLE DemoTable1922 ( StudentI