MySQL-এ LIMIT/OFFSET দিয়ে nth রো ডিলিট
MySQL-এ সরাসরি DELETE ... LIMIT 1 OFFSET n সাপোর্ট করে না। nth রো ডিলিট করতে সাবকোয়ারি ব্যবহার করে ঐ রোয়ার প্রাইমারি কি বের করে ডিলিট করা হয়।
সিনট্যাক্স
DELETE FROM yourTableName
WHERE primaryKey = (
SELECT primaryKey FROM (
SELECT primaryKey FROM yourTableName ORDER BY primaryKey LIMIT 1 OFFSET n-1
) AS tbl
);
উদাহরণ সহ ব্যাখ্যা
টেবিল তৈরি ও ডেটা:
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');
বর্তমান ডেটা:
mysql> SELECT * FROM DemoTable1;
+-----------+-------------+ | StudentId | StudentName | +-----------+-------------+ | 1 | Larry | | 2 | Sam | | 3 | Mike | | 4 | Carol | | 5 | David | | 6 | Bob | +-----------+-------------+
২য় রো (n=2, OFFSET 1) ডিলিট:
mysql> DELETE FROM DemoTable1
-> WHERE StudentId = (
-> SELECT StudentId FROM (
-> SELECT StudentId FROM DemoTable1 ORDER BY StudentId LIMIT 1, 1
-> ) AS tbl
-> );
ফলাফল (Sam মুছে গেল):
mysql> SELECT * FROM DemoTable1;
+-----------+-------------+ | StudentId | StudentName | +-----------+-------------+ | 1 | Larry | | 3 | Mike | | 4 | Carol | | 5 | David | | 6 | Bob | +-----------+-------------+
নোট: MySQL 8.0+ এ LIMIT 1 OFFSET 1 সিনট্যাক্সও কাজ করে। ডেরাইভড টেবিল (AS tbl) MySQL-এ বাধ্যতামূলক।