আমার একটি ফাংশন রয়েছে যা তিনটি টেবিল আপডেট করে তবে আমি এটি সম্পাদন করতে তিনটি ক্যোরি ব্যবহার করি। আমি ভাল অনুশীলনের জন্য আরও সুবিধাজনক পদ্ধতির ব্যবহার করতে চাই।
আমি কীভাবে একক কোয়েরি দিয়ে মাইএসকিউএল একাধিক টেবিল আপডেট করতে পারি?
আমার একটি ফাংশন রয়েছে যা তিনটি টেবিল আপডেট করে তবে আমি এটি সম্পাদন করতে তিনটি ক্যোরি ব্যবহার করি। আমি ভাল অনুশীলনের জন্য আরও সুবিধাজনক পদ্ধতির ব্যবহার করতে চাই।
আমি কীভাবে একক কোয়েরি দিয়ে মাইএসকিউএল একাধিক টেবিল আপডেট করতে পারি?
উত্তর:
দুটি টেবিলের ক্ষেত্রে নিন, Books
এবং Orders
। ক্ষেত্রে, আমরা একটি নির্দিষ্ট ক্রমে বই সংখ্যা বাড়িয়ে Order.ID = 1002
এ Orders
টেবিল তারপর আমরা কমাতে প্রয়োজন যে একই সংখ্যা দ্বারা আমাদের স্টক উপলব্ধ বই মোট সংখ্যা Books
টেবিল।
UPDATE Books, Orders
SET Orders.Quantity = Orders.Quantity + 2,
Books.InStock = Books.InStock - 2
WHERE
Books.BookID = Orders.BookID
AND Orders.OrderID = 1002;
UPDATE t1
INNER JOIN t2 ON t2.t1_id = t1.id
INNER JOIN t3 ON t2.t3_id = t3.id
SET t1.a = 'something',
t2.b = 42,
t3.c = t2.c
WHERE t1.a = 'blah';
এটি কী আপডেট হতে চলেছে তা দেখার জন্য আপনি এটিকে একটি নির্বাচিত বিবৃতিতে রূপান্তর করতে পারেন, যেমন:
SELECT t2.t1_id, t2.t3_id, t1.a, t2.b, t2.c AS t2_c, t3.c AS t3_c
FROM t1
INNER JOIN t2 ON t2.t1_id = t1.id
INNER JOIN t3 ON t2.t3_id = t3.id
WHERE t1.a = 'blah';
অন্যান্য উত্তরের মতো একই টেবিলগুলি ব্যবহার করে একটি উদাহরণ:
SELECT Books.BookID, Orders.OrderID,
Orders.Quantity AS CurrentQuantity,
Orders.Quantity + 2 AS NewQuantity,
Books.InStock AS CurrentStock,
Books.InStock - 2 AS NewStock
FROM Books
INNER JOIN Orders ON Books.BookID = Orders.BookID
WHERE Orders.OrderID = 1002;
UPDATE Books
INNER JOIN Orders ON Books.BookID = Orders.BookID
SET Orders.Quantity = Orders.Quantity + 2,
Books.InStock = Books.InStock - 2
WHERE Orders.OrderID = 1002;
সম্পাদনা করুন:
শুধু মজাদার জন্য, আসুন আরও কিছু আকর্ষণীয় কিছু যুক্ত করুন।
ধরা যাক আপনার একটি টেবিল books
এবং একটি টেবিল রয়েছে authors
। তোমার books
একটি আছে author_id
। কিন্তু যখন ডাটাবেসটি মূলত তৈরি করা হয়েছিল তখন কোনও বিদেশী কী বাধার সীমাবদ্ধ করা হয়নি এবং পরবর্তীতে ফ্রন্ট-এন্ড কোডে একটি বাগের ফলে কিছু বই অবৈধ author_id
গুলি যুক্ত করা হয়েছিল । ডিবিএ হিসাবে আপনাকে books
কী হওয়া author_id
উচিত তা যাচাই করার জন্য আপনাকে এগুলির মধ্যে দিয়ে যেতে হবে না, তাই সিদ্ধান্ত নেওয়া হয়েছে যে তথ্য ক্যাপচারকারীরা books
ডানদিকে নির্দেশ করতে পারে authors
। তবে প্রত্যেকটি বইয়ের জন্য প্রচুর বই রয়েছে এবং আসুন আমরা আপনাকে জানাতে পারি author_id
যে যেগুলির সাথে একটি সত্যিকারের সাথে মিল রয়েছে author
সেগুলি সঠিক। এটি কেবলমাত্র অস্তিত্বহীনauthor_id
যেগুলি অবৈধ। ব্যবহারকারীদের বইয়ের বিবরণ আপডেট করার জন্য ইতিমধ্যে একটি ইন্টারফেস রয়েছে এবং বিকাশকারীরা কেবল এই সমস্যার জন্য এটি পরিবর্তন করতে চান না। তবে বিদ্যমান ইন্টারফেসটি একটি করে INNER JOIN authors
, তাই অবৈধ লেখক সহ সমস্ত বই বাদ দেওয়া হয়।
আপনি যা করতে পারেন তা হ'ল "অজানা লেখক" এর মতো একটি ভুয়া লেখকের রেকর্ড .োকান। তারপরে author_id
অজ্ঞাত লেখককে নির্দেশ করতে সমস্ত খারাপ রেকর্ডগুলির আপডেট করুন । তারপরে ডেটা ক্যাপচারকারীরা লেখককে "অজানা লেখক" এ সেট করে সমস্ত বই অনুসন্ধান করতে পারেন, সঠিক লেখকটি সন্ধান করে সেগুলি ঠিক করতে পারেন।
অজানা লেখককে নির্দেশ করতে আপনি কীভাবে সমস্ত খারাপ রেকর্ড আপডেট করবেন? এটির মতো (অজানা লেখকের ধারণা author_id
99999):
UPDATE books
LEFT OUTER JOIN authors ON books.author_id = authors.id
SET books.author_id = 99999
WHERE authors.id IS NULL;
উপরে এছাড়াও আপডেট হবে books
যে একটি আছে NULL
author_id
অজানা লেখক। যদি আপনি এটি না চান তবে অবশ্যই আপনি যোগ করতে পারেন AND books.author_id IS NOT NULL
।
আপনি এইভাবে একটি যোগদানের ব্যবহার করে একটি প্রশ্নের সাথেও এটি করতে পারেন:
UPDATE table1,table2 SET table1.col=a,table2.col2=b
WHERE items.id=month.id;
এবং তারপরে অবশ্যই এই একটি কোয়েরি প্রেরণ করুন। আপনি এখানে যোগদানের বিষয়ে আরও পড়তে পারেন: http://dev.mysql.com/doc/refman/5.0/en/join.html । আপনি এখানে পড়তে পারেন এমন একাধিক টেবিল আপডেটগুলিতে অর্ডার ও সীমাবদ্ধ করার জন্যও বেশ কয়েকটি বিধিনিষেধ রয়েছে: http://dev.mysql.com/doc/refman/5.0/en/update.html (just ctrl + f "join")।
এটি সাধারণত সঞ্চিত পদ্ধতিগুলির জন্য যা: এক সিকোয়েন্সে বেশ কয়েকটি এসকিউএল স্টেটমেন্ট প্রয়োগ করা। রোলব্যাকগুলি ব্যবহার করে, আপনি নিশ্চিত করতে পারেন যে এগুলি কাজের একক হিসাবে বিবেচিত হবে, যেমন হয় তারা সকলেই মৃত্যুদণ্ডপ্রাপ্ত হয় বা তাদের কোনওটিই হয় না, তথ্য ধারাবাহিক রাখতে।
আপনি যখন একাধিক ক্যোয়ারী বলছেন তখন কি আপনি বোঝাচ্ছেন একাধিক এসকিউএল স্টেটমেন্টগুলি যেমন:
UPDATE table1 SET a=b WHERE c;
UPDATE table2 SET a=b WHERE d;
UPDATE table3 SET a=b WHERE e;
বা একাধিক ক্যোয়ারী ফাংশন কল হিসাবে রয়েছে:
mySqlQuery(UPDATE table1 SET a=b WHERE c;)
mySqlQuery(UPDATE table2 SET a=b WHERE d;)
mySqlQuery(UPDATE table3 SET a=b WHERE e;)
প্রাক্তন সবাই একক মাইএসকিউএলকিউরি কল ব্যবহার করেই করা যেতে পারে যদি আপনি এটি অর্জন করতে চান তবে কেবল মাইএসকিউএলকিউরি ফাংশনটি নিম্নলিখিত পদ্ধতিতে কল করুন:
mySqlQuery(UPDATE table1 SET a=b WHERE c; UPDATE table2 SET a=b WHERE d; UPDATE table3 SET a=b WHERE e;)
এটি একটি মাইএসকিউএকএলকিউরি () কল দিয়ে তিনটি ক্যোয়ারিকেই কার্যকর করবে।