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

MySQL-এ ERROR 1093 সমাধান: সাবকোয়েরিতে ডিরাইভড টেবিল ব্যবহার করে নিজের টেবিল ডিলিট/আপডেট করুন

MySQL-এ একই টেবিল আপডেট/ডিলিট করার কোয়েরির ভিতর সাবকোয়েরিতে সেই টেবিল রেফারেন্স দিলে ERROR 1093 (HY000): You can't specify target table for update in FROM clause দেখা দেয়। সমাধান: সাবকোয়েরিকে ডিরাইভড টেবিল (এলিয়াসসহ) হিসেবে র‍্যাপ করুন।

উদাহরণ: ন্যূনতম Marks ডিলিট করা

১. টেবিল তৈরি করুন

mysql> CREATE TABLE DemoTable1597 (Marks INT);

২. ডেটা ইনসার্ট করুন

mysql> INSERT INTO DemoTable1597 VALUES(45), (59), (43), (85), (89);

৩. সব রেকর্ড দেখুন

mysql> SELECT * FROM DemoTable1597;

আউটপুট: 45, 59, 43, 85, 89

৪. ❌ ভুল কোয়েরি (ERROR 1093)

DELETE FROM DemoTable1597 WHERE Marks = (SELECT MIN(Marks) FROM DemoTable1597) LIMIT 1;

৫. ✅ সঠিক কোয়েরি (ডিরাইভড টেবিল + এলিয়াস)

mysql> DELETE FROM DemoTable1597
    -> WHERE Marks = (
    ->     SELECT lowestMarks FROM (
    ->         SELECT MIN(Marks) AS lowestMarks FROM DemoTable1597
    ->     ) AS deleteRecord
    -> ) LIMIT 1;

৬. ডিলিট পরের রেকর্ড দেখুন (৪৩ ডিলিট হয়েছে)

mysql> SELECT * FROM DemoTable1597;

আউটপুট:

+-------+
| Marks |
+-------+
| 45    |
| 59    |
| 85    |
| 89    |
+-------+

ব্যাখ্যা: ইনার সাবকোয়েরি (SELECT MIN(Marks) ...) রেজাল্ট সেট রিটার্ন করে। বাহ্যিক SELECT lowestMarks FROM (...) AS deleteRecord একটি ডিরাইভড টেবিল (টেম্পোরারি টেবিল) বানায়, যা MySQL-কে মনে করায় যে এটি আলাদা একটি টেবিল। ফলে ERROR 1093 এড়ে যায়।

MySQL 8.0+ CTE ব্যবহার করে আরও পঠনযোগ্য:

WITH to_delete AS (SELECT MIN(Marks) AS min_mark FROM DemoTable1597)
DELETE FROM DemoTable1597 WHERE Marks = (SELECT min_mark FROM to_delete) LIMIT 1;
  1. MySQL বুলিয়ান কলাম তৈরি করা এবং একই কলাম পরিবর্তন করার সময় ডিফল্ট মান ১ নির্ধারণ করা

  2. টেবিল আপডেট করেও SUM ক্যালকুলেট করে ফলাফল লাস্ট কলাম হিসেবে দেখানো

  3. MySQL-এ 'index' নামের কলাম তৈরি করার সময় সিনট্যাক্স এরর ফিক্স করা

  4. MySQL-এ নির্দিষ্ট মান ثابت রেখে বাকি সারি র‍্যান্ডমভাবে সর্ট করা