MySQL-এ UPDATE স্টেটমেন্টে WHERE ক্লজে সাবকুয়েরি (SELECT) ব্যবহার করে ডাইনামিক শর্তের ভিত্তিতে রো আপডেট করা যায়।
টেবিল এবং ডেটা
CREATE TABLE DemoTable (
Id INT,
Name VARCHAR(20)
);
INSERT INTO DemoTable VALUES(100,'Chris');
INSERT INTO DemoTable VALUES(250,'David');
INSERT INTO DemoTable VALUES(150,'Mike');
কুয়েরি: সর্বোচ্চ Id-वाले রোয়ের নাম আপডেট
UPDATE DemoTable
SET Name = 'Robert'
WHERE Id IN (
SELECT * FROM (
SELECT MAX(Id) FROM DemoTable
) AS tbl1
);
ফলাফল
+------+--------+
| Id | Name |
+------+--------+
| 100 | Chris |
| 250 | Robert |
| 150 | Mike |
+------+--------+
ব্যাখ্যা
SELECT MAX(Id) FROM DemoTable— সর্বোচ্চ Id বের করে (২৫০)SELECT * FROM (...) AS tbl1— ডেরাইভড টেবিল (MySQL-এ সাবকুয়েরি আপডেটে সরাসরি একই টেবিল রেফারেন্স দিলে এরর দেয়:You can't specify target table for update in FROM clause)WHERE Id IN (...)— সাবকুয়েরির ফলাফল ম্যাচ করে
সরলীকৃত সংস্করণ (MySQL 8.0+ CTE)
WITH max_id AS (SELECT MAX(Id) AS id FROM DemoTable)
UPDATE DemoTable d
JOIN max_id m ON d.Id = m.id
SET d.Name = 'Robert';
সাধারণ প্যাটার্ন
UPDATE t1
SET col = val
WHERE id IN (SELECT id FROM (SELECT id FROM t1 WHERE condition) AS tmp);
ডেরাইভড টেবিল (AS tmp) ব্যবহার করাই MySQL-এ এই সমস্যার সমাধান।