MySQL-এ একটি টেবিলের ডেটা অন্য টেবিলের ডেটা দিয়ে আপডেট করতে UPDATE ... JOIN সিনট্যাক্স ব্যবহার করা হয়।
উদাহরণ
সোর্স টেবিল (demo54) - সম্পূর্ণ ডেটা:
CREATE TABLE demo54 (firstName VARCHAR(20), lastName VARCHAR(20));
INSERT INTO demo54 VALUES ('John', 'Smith'), ('John', 'Smith'), ('David', 'Smith');
টার্গেট টেবিল (demo55) - lastName NULL:
CREATE TABLE demo55 (firstName VARCHAR(20), lastName VARCHAR(20));
INSERT INTO demo55(firstName) VALUES ('John'), ('David'), ('Bob');
আপডেটের আগে demo55:
+-----------+----------+ | firstName | lastName | +-----------+----------+ | John | NULL | | David | NULL | | Bob | NULL | +-----------+----------+
আপডেট কোয়েরি
UPDATE demo55 tbl1 JOIN demo54 tbl2 ON tbl1.firstName = tbl2.firstName SET tbl1.lastName = tbl2.lastName;
আপডেটের পর demo55:
+-----------+----------+ | firstName | lastName | +-----------+----------+ | John | Smith | | David | Smith | | Bob | NULL | +-----------+----------+
ব্যাখ্যা:
JOIN demo54 tbl2 ON tbl1.firstName = tbl2.firstName- firstName মিলে যাওয়া রোগুলো জয়িন করে।SET tbl1.lastName = tbl2.lastName- demo55-এর lastName কলাম আপডেট হয়।- John (২টি রো demo54-এ) -> demo55-এর John রো আপডেট হয়েছে (lastName = 'Smith')।
- David -> আপডেট হয়েছে।
- Bob -> demo54-এ নেই, তাই আপডেট হয়নি (NULL থাকে)।
Rows matched: 2 Changed: 2- ২টি রো ম্যাচ, ২টি পরিবর্তন।
সতর্কতা: যদি demo54-এ একই firstName-এ একাধিক ভিন্ন lastName থাকে, তবে আপডেট অনির্ধারিত (নন-ডিটারমিনিস্টিক) হবে। সেক্ষেত্রে LIMIT 1 বা এগгреগেশন ব্যবহার করুন।