सबक्वेरी के साथ DELETE से nth पंक्ति हटाएं
MySQL में nth पंक्ति डिलीट करने के लिए DELETE के साथ LIMIT वाली सबक्वेरी का उपयोग करें।
उदाहरण
टेबल बनाएं:
mysql> CREATE TABLE DemoTable1 (
-> StudentId INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
-> StudentName VARCHAR(100)
-> );
डेटा इन्सर्ट करें:
mysql> INSERT INTO DemoTable1(StudentName) VALUES('Larry'), ('Sam'), ('Mike'), ('Carol'), ('David'), ('Bob');
सभी रिकॉर्ड:
+-----------+-------------+ | StudentId | StudentName | +-----------+-------------+ | 1 | Larry | | 2 | Sam | | 3 | Mike | | 4 | Carol | | 5 | David | | 6 | Bob | +-----------+-------------+
दूसरी पंक्ति (n=2) डिलीट करने की क्वेरी
mysql> DELETE FROM DemoTable1
-> WHERE StudentId = (
-> SELECT StudentId FROM (
-> SELECT StudentId FROM DemoTable1 ORDER BY StudentId LIMIT 1, 1
-> ) AS tbl
-> );
आउटपुट: Query OK, 1 row affected (0.19 sec)
डिलीट के बाद:
mysql> SELECT * FROM DemoTable1;
+-----------+-------------+ | StudentId | StudentName | +-----------+-------------+ | 1 | Larry | | 3 | Mike | | 4 | Carol | | 5 | David | | 6 | Bob | +-----------+-------------+
कैसे काम करता है:
- आंतरिक सबक्वेरी:
ORDER BY StudentId LIMIT 1, 1- पहली पंक्ति छोड़कर दूसरी पंक्ति चुनता है - बाहरी सबक्वेरी:
SELECT StudentId FROM (...) AS tbl- MySQL की आवश्यकता पूरी करता है (सबक्वेरी को डेराइव्ड टेबल बनाता है) - मुख्य DELETE: मिले StudentId वाली पंक्ति हटाता है
सामान्य पैटर्न: nth पंक्ति (1-आधारित)
DELETE FROM table_name
WHERE id_column = (
SELECT id_column FROM (
SELECT id_column FROM table_name ORDER BY id_column LIMIT n-1, 1
) AS t
);
चेतावनी: यह ऑपरेशन स्थायी है। पहले SELECT से वही सबक्वेरी चलाकर पुष्टि करें।
MySQL 8.0+ विकल्प: CTE (Common Table Expression) से अधिक पठनीय:
WITH numbered AS (
SELECT StudentId, ROW_NUMBER() OVER (ORDER BY StudentId) AS rn
FROM DemoTable1
)
DELETE FROM DemoTable1
WHERE StudentId = (SELECT StudentId FROM numbered WHERE rn = 2);