কীভাবে 3 টি টেবিলটি আপডেটের ক্যোয়ারিতে যোগদান করবেন?


465

আমি একটি প্রশ্ন জিজ্ঞাসা করেছি এবং এই উত্তরটি পেয়েছে যা সাহায্য করেছিল।

   UPDATE TABLE_A a JOIN TABLE_B b 
   ON a.join_col = b.join_col AND a.column_a = b.column_b 
   SET a.column_c = a.column_c + 1

3 টি টেবিল যদি এর সাথে জড়িত কিছু থাকে তবে এখন আমি এটি করতে চাই।

    UPDATE tableC c JOIN tableB b JOIN tableA a

আমার প্রশ্নটি মূলত ... একটি UPDATEবিবৃতিতে 3 টেবিল যোগ করা কি সম্ভব ? এবং এর সঠিক বাক্য গঠন কী? ধন্যবাদ. আমি কি ...

 JOIN tableB, tableA
 JOIN tableB JOIN tableA

2
অবশ্যই এটি সম্ভব। একবার চেষ্টা করে দেখো. বাক্য গঠনটি যেমন ঠিক তেমন রয়েছে ঠিক তেমনই আপনাকে পরবর্তী JOINএবং এর ONশর্তটি যুক্ত করতে হবে যেমন আপনি কোনও SELECTক্যোয়ারিতে যাবেন ।
মাইকেল বারকোভস্কি

2
UPDATE t1 JOIN t2 ON t1.id = t2.t1_id JOIN t3 ON t3.id = t2.t3_id SET t1.col = 'newval'
মাইকেল বারকোভস্কি

1
উল্লিখিত প্রশ্নটি এখানে: স্ট্যাকওভারফ্লো.com
উরস

উত্তর:


807

উত্তর yesআপনি করতে পারেন

এটি চেষ্টা করুন

UPDATE TABLE_A a 
    JOIN TABLE_B b ON a.join_col = b.join_col AND a.column_a = b.column_b 
    JOIN TABLE_C c ON [condition]
SET a.column_c = a.column_c + 1

সম্পাদনা করুন:

সাধারণ আপডেটের জন্য যোগ দিন:

   UPDATE TABLEA a 
   JOIN TABLEB b ON a.join_colA = b.join_colB  
   SET a.columnToUpdate = [something]

2
অদ্ভুত বিষয়টি হ'ল আমার হেইডিএসকিউএল সফ্টওয়্যার শূন্য আক্রান্ত সারিগুলি রিপোর্ট করে, যদিও ডেটা দেখায় যে আপডেটগুলি করা হয়েছিল।
পিয়ানোম্যান

1
@ পিয়ানোম্যান আমার কাছে এটিও ঘটেছিল এবং এটি ওপেন আপ CURRENT_TIMESTAMP এর সাথে কিছু করার ছিল, আমি স্রেফ আপডেটটি ম্যানুয়ালি যুক্ত করেছিলাম এবং এটি ঠিক করে দিয়েছিলাম, এটি অন্য কারও সাথে ঘটে কিনা তা বলেছিল
এরিক.টিজাক

আপনার যোগদানের সঠিকটি পেতে যদি আপনার ভিজ্যুয়াল এইডের প্রয়োজন হয়: ব্রাউজ- টিউটোরিয়ালস
মাইসকিএল-

আমি মনে করি নিম্নলিখিতটি আরও ভাল সাধারণ পরিকল্পনা: UPDATE table A JOIN table B ON {join data} JOIN table C ON {join data} JOIN {more join tables} SET A.column = {expression}(যদি এই ব্লাস্টড সম্পাদক আমাকে পুরো পোস্ট না করে নতুন
লাইনে

কোথায় WHERE?? নাকি WHEREসম্ভব হচ্ছে না?
সবুজ

41

একই ফলাফল অর্জনের বিকল্প উপায়টিJOIN কীওয়ার্ডটি মোটেই ব্যবহার করা নয়।

UPDATE TABLE_A, TABLE_B
SET TABLE_A.column_c = TABLE_B.column_c + 1
WHERE TABLE_A.join_col = TABLE_B.join_col

3
আমি এটি 5.5.62 এ চেষ্টা করেছি এবং মাইএসকিএল সিন্টেক্সটি পছন্দ করে না। ম্যানুয়াল অনুসারে [ dev.mysql.com/doc/refman/5.6/en/update.html] , ক্যোয়ারীটি হওয়া উচিত:UPDATE TABLE_A, TABLE_B SET TABLE_A.column_c = TABLE_A.column_c +1 WHERE TABLE_A.join_col = TABLE_B.join_col
Noe Nieto

7
এটি JOINএকইভাবে করার মতো একটি অন্তর্নিহিত কাজ SELECT * FROM TABLE_A, TABLE_B ...করে
ম্যাডব্রেকস

সুতরাং এর অর্থ কি 5.5-তে কেবল অন্তর্নিহিত ফর্ম আপডেটের জন্য গৃহীত হয়?
ব্যবহারকারীফিউজার

@userfuser না, এটা, ম্যানুয়াল রাজ্যের সিনট্যাক্স না: UPDATE [LOW_PRIORITY] [IGNORE] table_references SET col_name1={expr1|DEFAULT} [, col_name2={expr2|DEFAULT}] ... [WHERE where_condition]পরে, ম্যানুয়াল পদ বলে: " table_referencesদফা তালিকায় জড়িত টেবিল যোগদানের তার সিনট্যাক্স বর্নণা করা আছে। অনুচ্ছেদ 13.2.9.2, যোগদান সিনট্যাক্স ।"
হামুন্ড

4
হুবহু একই ফলাফল নয় - আপনি যোগ বাক্য গঠনের সাথে বাম যোগদান করতে পারেন।
জেরার্ড ওনিল

10

নীচে আপডেট ক্যোয়ারী রয়েছে যা এতে JOINএবং WHEREউভয়ই অন্তর্ভুক্ত রয়েছে । একইভাবে আমরা একাধিক যোগদান / যেখানে ক্লজ ব্যবহার করতে পারি, আশা করি এটি আপনাকে সহায়তা করবে: -

UPDATE opportunities_cstm oc JOIN opportunities o ON oc.id_c = o.id
 SET oc.forecast_stage_c = 'APX'
 WHERE o.deleted = 0
   AND o.sales_stage IN('ABC','PQR','XYZ')

3
স্ট্যাক ওভারফ্লোতে স্বাগতম! এই কোড স্নিপেটের জন্য আপনাকে ধন্যবাদ, যা কিছু তাত্ক্ষণিক সহায়তা সরবরাহ করতে পারে। একটি সঠিক ব্যাখ্যা কেন এটি সমস্যার একটি ভাল সমাধান তা দেখিয়ে তার শিক্ষাগত মানকে ব্যাপকভাবে উন্নত করবে এবং ভবিষ্যতের পাঠকদের জন্য একই, তবে অভিন্ন নয়, এমন প্রশ্নের সাথে আরও দরকারী করে তুলবে। দয়া করে ব্যাখ্যা যুক্ত করতে আপনার উত্তর সম্পাদনা করুন, এবং কোন সীমাবদ্ধতা এবং অনুমানগুলি প্রযোজ্য তা একটি ইঙ্গিত দিন।
টবি স্পাইট

2

একটি বিকল্প সাধারণ পরিকল্পনা, যা আমি কেবল একটি স্বাধীন উত্তর হিসাবে যুক্ত করছি কারণ ব্লাস্টেড "একটি উত্তরের মন্তব্য" পুরো সম্পাদনাটি পোস্ট না করেই নতুন লাইন গ্রহণ করবে না, যদিও এটি এখনও শেষ হয়নি finished

UPDATE table A
JOIN table B ON {join fields}
JOIN table C ON {join fields}
JOIN {as many tables as you need}
SET A.column = {expression}

উদাহরণ:

UPDATE person P
JOIN address A ON P.home_address_id = A.id
JOIN city C ON A.city_id = C.id
SET P.home_zip = C.zipcode;

1

PostgreSQL উদাহরণের জন্য:

UPDATE TableA AS a
SET param_from_table_a=FALSE -- param FROM TableA
FROM TableB AS b
WHERE b.id=a.param_id AND a.amount <> 0; 
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.