একটি একক বিবৃতি দিয়ে একটি সারণীতে অনেক সারি আপডেট করবেন?


9

কোনও সারণীতে অনেকগুলি সারি আপডেট করার সহজ উপায় কী? আমার কাছে এমন একটি সিএসভি ফাইল রয়েছে যা দেখে মনে হচ্ছে:

|primary_key |value|
|          1 |  xyz|
|          2 |  abc|
|          3 |  def|
...

এই প্রাথমিক কীগুলির সাথে সারিগুলি ইতিমধ্যে লক্ষ্য সারণীতে বিদ্যমান

আমি এই মানগুলি সহ লক্ষ্য সারণি আপডেট করতে চাই। সিনট্যাক্স আছে কি যাতে আমি কিছু লিখতে পারি:

update mytable set value = ('xyz', 'abc', 'def') where primary key = (1,2,3);

মাইএসকিউএল আপডেট রেফারেন্সের মাধ্যমে এই সাইটটি ( মাইএসকিউএল - সিএসভি আপডেট ), এসও ( একাধিক সারি আপডেট করুন , একাধিক ডিবি আপডেট করুন , একাধিক সারি আপডেট করুন ), আমি সন্দেহ করি যে উত্তরটি "না", তবে আমি এটি নিশ্চিত করতে চাই সত্য.


আমি মাইএসকিউএল ট্যাগ যুক্ত করে ধরেছিলাম যে মাইএসকিউএল ডকুমেন্টেশনের ক্ষেত্রে আপনার উল্লেখগুলি হ'ল আপনি যে ডাটাবেসটি ব্যবহার করছেন তা বোঝানো হয়েছে।
জাস্টিন গুহ

উত্তর:


10

প্রথম এখানে নমুনা তথ্য

mysql> drop table if exists mytable;
Query OK, 0 rows affected (0.03 sec)

mysql> create table mytable
    -> (
    ->     id int not null,
    ->     value VARCHAR(255),
    ->     primary key (id)
    -> );
Query OK, 0 rows affected (0.06 sec)

mysql> insert into mytable (id) values (1),(2),(3);
Query OK, 3 rows affected (0.06 sec)
Records: 3  Duplicates: 0  Warnings: 0

mysql> select * from mytable;
+----+-------+
| id | value |
+----+-------+
|  1 | NULL  |
|  2 | NULL  |
|  3 | NULL  |
+----+-------+
3 rows in set (0.00 sec)

mysql>

এখানে নতুন জিজ্ঞাসা

update mytable A inner join
(
    SELECT 1 id,'xyz' value UNION
    SELECT 2   ,'abc'       UNION
    SELECT 3   ,'def'

) B USING (id)
SET A.value = B.value;

এখানে নতুন জিজ্ঞাসা কার্যকর করা হয়েছে

mysql> update mytable A inner join
    -> (
    ->     SELECT 1 id,'xyz' value UNION
    ->     SELECT 2   ,'abc'       UNION
    ->     SELECT 3   ,'def'
    -> ) B USING (id)
    -> SET A.value = B.value;
Query OK, 0 rows affected (0.06 sec)
Rows matched: 3  Changed: 0  Warnings: 0

mysql> select * from mytable;
+----+-------+
| id | value |
+----+-------+
|  1 | xyz   |
|  2 | abc   |
|  3 | def   |
+----+-------+
3 rows in set (0.00 sec)

mysql>

UPDATE table INNER JOIN ... USING(id) SET ...দুর্দান্ত
নিনো আকোপাক

3

ধরে নিচ্ছেন যে আপনি সিএসভি ফাইল থেকে ডেটাবেস টেবিলের মধ্যে ডেটা লোড করতে চান না এবং তারপরে একটি সম্পর্কিত UPDATE,

UPDATE mytable t
   SET value = (SELECT value
                  FROM tbl_with_csv_data csv
                 WHERE csv.primary_key = t.primary_key)
 WHERE EXISTS( SELECT 1
                 FROM tbl_with_csv_data csv
                 WHERE csv.primary_key = t.primary_key)

তাহলে আপনার একটি ব্যবহার করতে সক্ষম হওয়া উচিত CASE

UPDATE mytable t
   SET value = CASE WHEN primary_key = 1 THEN 'xyz'
                    WHEN primary_key = 2 THEN 'abc'
                    WHEN primary_key = 3 THEN 'def'
                    ELSE value
                END
 WHERE primary_key IN (1,2,3);
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.