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

MySQL-এ টেবিলে নেই এমন মানগুলো কোয়েরি করে বের করা (UNION ALL + NOT EXISTS)

কোনো টেবিলে কোন মানগুলো অনুপস্থিত তা খুঁজে বের করতে UNION ALL দিয়ে একটি ভার্চুয়াল টেবিল বানিয়ে NOT EXISTS বা NOT IN ব্যবহার করা যায়।

টেবিল ও ডেটা তৈরি

mysql> CREATE TABLE DemoTable1918 (
    Value INT NOT NULL AUTO_INCREMENT PRIMARY KEY
);

mysql> INSERT INTO DemoTable1918 VALUES (), (), (), (), (); -- ১ থেকে ৫

টেবিলের ডেটা

mysql> SELECT * FROM DemoTable1918;
+-------+
| Value |
+-------+
|     1 |
|     2 |
|     3 |
|     4 |
|     5 |
+-------+

অনুপস্থিত মান খুঁজে বের করার কোয়েরি (৬, ৭, ৮)

mysql> SELECT tbl.Value
    FROM (
        SELECT 6 AS Value UNION ALL
        SELECT 7 UNION ALL
        SELECT 8
    ) tbl
    WHERE NOT EXISTS (
        SELECT 1 FROM DemoTable1918 tbl1 WHERE tbl1.Value = tbl.Value
    );

আউটপুট:

+-------+
| Value |
+-------+
|     6 |
|     7 |
|     8 |
+-------+

বিকল্প: LEFT JOIN পদ্ধতি

SELECT v.val
FROM (SELECT 6 AS val UNION ALL SELECT 7 UNION ALL SELECT 8) v
LEFT JOIN DemoTable1918 t ON t.Value = v.val
WHERE t.Value IS NULL;

ব্যাখ্যা

  • UNION ALL দ্রুত (ডুপ্লিকেট চেক করে না)।
  • NOT EXISTS সাধারণত NOT IN চেয়ে দ্রুত এবং NULL-সেফ।
  • বüyük সেটের জন্য টেম্পোরারি টেবিল বা CTE (MySQL 8.0+) ভালো।
  1. MySQL-এ শুধুমাত্র NULL মান আপডেট করে অন্য মান দিয়ে প্রতিস্থাপন করা

  2. MySQL কোয়েরি কলামে n-তম সর্বোচ্চ মান বের করতে মানগুলো স্কিপ করে

  3. MySQL-এ GROUP BY + MAX() ব্যবহার করে প্রতিটি গ্রুপের সর্বোচ্চ মান বের করা

  4. MySQL-এ INSERT INTO SELECT ব্যবহার করে অন্য টেবিল থেকে ডেটা কপি করা