বাম JOIN ব্যবহার করে MySQL মধ্যে একাধিক টেবিল আপডেট করুন



sql-update (4)

একই অবস্থানে প্রয়োগ করা যেতে পারে যেখানে তথ্য স্বাভাবিক করা হয়েছে, কিন্তু এখন আপনি একটি টেবিলটি তৃতীয় তলায় পাওয়া মানগুলি পেতে চান। নিম্নলিখিত একটি তৃতীয় টেবিল দ্বারা পছন্দ করা হয় যে একটি তৃতীয় টেবিল থেকে তথ্য সঙ্গে একটি টেবিল আপডেট করার অনুমতি দেবে।

UPDATE t1
LEFT JOIN
 t2
ON 
 t2.some_id = t1.some_id
LEFT JOIN
 t3 
ON
 t2.t3_id = t3.id
SET 
 t1.new_column = t3.column;

এটি এমন একটি ক্ষেত্রে উপকারী হবে যেখানে আপনার ব্যবহারকারী এবং গোষ্ঠী ছিল এবং আপনি একটি ব্যবহারকারীকে গ্রুপ নামের নিজস্ব পরিবর্তনের যোগ করতে সমর্থ করতে চান, তাই মূলত আপনি বিদ্যমান গ্রুপের নাম ক্ষেত্রের মধ্যে আমদানি করতে চান যেখানে ব্যবহারকারী এটি পরিবর্তন করতে সক্ষম হতে যাচ্ছে।

আমার দুটি টেবিল আছে, এবং LE1 যুক্ত সমস্ত সারিগুলির জন্য T1 এ ক্ষেত্রগুলি আপডেট করতে চাই।

একটি সহজ উদাহরণের জন্য, নিম্নলিখিত ফলাফল-সেটের সমস্ত সারি আপডেট করুন:

SELECT T1.* FROM T1 LEFT JOIN T2 ON T1.id = T2.id WHERE T2.id IS NULL  

মাইএসকিউএল ম্যানুয়ালটি বলে যে:

একাধিক-টেবিল UPDATE বিবৃতিগুলি LEFT JOIN হিসাবে SELECT বিবৃতিগুলিতে অনুমোদিত কোনও ধরণের যোগদান ব্যবহার করতে পারে।

কিন্তু ডকুমেন্টেড একাধিক-টেবিল আপডেটের মধ্যে এটি করার জন্য আমি সঠিক সিনট্যাক্স খুঁজে পাচ্ছি না।

সঠিক সিনট্যাক্স কি?


Answer #1
Table A 
+--------+-----------+
| A-num  | text      | 
|    1   |           |
|    2   |           |
|    3   |           |
|    4   |           |
|    5   |           |
+--------+-----------+

Table B
+------+------+--------------+
| B-num|  date        |  A-num | 
|  22  |  01.08.2003  |     2  |
|  23  |  02.08.2003  |     2  | 
|  24  |  03.08.2003  |     1  |
|  25  |  04.08.2003  |     4  |
|  26  |  05.03.2003  |     4  |

আমি টেবিল এ সঙ্গে ক্ষেত্রের টেক্সট ক্ষেত্র আপডেট হবে

UPDATE `Table A`,`Table B`
SET `Table A`.`text`=concat_ws('',`Table A`.`text`,`Table B`.`B-num`," from                                           
",`Table B`.`date`,'/')
WHERE `Table A`.`A-num` = `Table B`.`A-num`

এবং এই ফলাফল আসা:

Table A 
+--------+------------------------+
| A-num  | text                   | 
|    1   |  24 from 03 08 2003 /  |
|    2   |  22 from 01 08 2003 /  |       
|    3   |                        |
|    4   |  25 from 04 08 2003 /  |
|    5   |                        |
--------+-------------------------+

যেখানে টেবিল বি থেকে শুধুমাত্র একটি ক্ষেত্র গৃহীত হয়, তবে আমি এই ফলাফলে আসব:

Table A 
+--------+--------------------------------------------+
| A-num  | text                                       | 
|    1   |  24 from 03 08 2003                        |
|    2   |  22 from 01 08 2003 / 23 from 02 08 2003 / |       
|    3   |                                            |
|    4   |  25 from 04 08 2003 / 26 from 05 03 2003 / |
|    5   |                                            |
+--------+--------------------------------------------+

Answer #2
UPDATE `Table A` a
SET a.`text`=(
        SELECT group_concat(b.`B-num`,' from ',b.`date` SEPARATOR ' / ') 
        FROM `Table B` b WHERE (a.`A-num`=b.`A-num`)
)

Answer #3
                DECLARE @cols VARCHAR(max),@colsUpd VARCHAR(max), @query VARCHAR(max),@queryUpd VARCHAR(max), @subQuery VARCHAR(max)
DECLARE @TableNameTest NVARCHAR(150)
SET @TableNameTest = @TableName+ '_Staging';
SELECT  @colsUpd = STUF  ((SELECT DISTINCT '], T1.[' + name,']=T2.['+name+'' FROM sys.columns
                 WHERE object_id = (
                                    SELECT top 1 object_id 
                                      FROM sys.objects
                                     WHERE name = ''[email protected]TableNameTest+''
                                    )
                and name not in ('Action','Record_ID')
                FOR XML PATH('')
            ), 1, 2, ''
        ) + ']'


  Select @queryUpd ='Update T1
SET '[email protected]colsUpd+'
FROM '[email protected]TableName+' T1
INNER JOIN '[email protected]TableNameTest+' T2
ON T1.Record_ID = T2.Record_Id
WHERE T2.[Action] = ''Modify'''
EXEC (@queryUpd)




sql-update