কম্পিউটার টিউটোরিয়াল

MySQL-এ UPDATE-এ সাবকুয়েরি (SELECT) ব্যবহার করা

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-এ এই সমস্যার সমাধান।

  1. Java-এ MySQL PreparedStatement দিয়ে SELECT কোয়েরি চালানো

  2. MySQL-এ SELECT-এ IF() ফাংশন ব্যবহার করে শর্তভিত্তি আউটপুট দেওয়া

  3. C#-এ while লুপে break স্টেটমেন্ট ব্যবহার

  4. Python দিয়ে MySQL-এ IF স্টেটমেন্ট ব্যবহার করা