एकल कथन के साथ तालिका में कई पंक्तियों को अपडेट करें?


9

किसी तालिका में कई पंक्तियों को अपडेट करने का सबसे आसान तरीका क्या है? मेरे पास एक सीएसवी फाइल है जो इस तरह दिखती है:

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

इन प्राथमिक कुंजियों वाली पंक्तियाँ लक्ष्य तालिका में पहले से मौजूद हैं

मैं इन मूल्यों के साथ लक्ष्य तालिका को अद्यतन करना चाहूंगा। क्या सिंटैक्स है ताकि मैं कुछ लिख सकूं:

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

के माध्यम से देख रहे हैं MySQL अद्यतन संदर्भ , इस साइट ( MySQL - सीएसवी अद्यतन ), अतः ( अद्यतन एकाधिक पंक्तियों , कई डाटाबेस अपडेट , अद्यतन एकाधिक पंक्तियों ), मुझे लगता है कि इस सवाल का जवाब "नहीं" है, लेकिन मैं इस बात की पुष्टि करना चाहते हैं यह है कि सच हैं।


मैंने MySQL टैग को यह कहते हुए जोड़ा कि MySQL प्रलेखन के आपके संदर्भ निहित हैं जो आपके द्वारा उपयोग किए जा रहे डेटाबेस थे।
जस्टिन गुफा

जवाबों:


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 ...महान है
नीनो Škopac

3

यह मानते हुए कि आप CSV फ़ाइल से डेटा को डेटाबेस तालिका में लोड नहीं करना चाहते हैं और फिर एक सहसंबद्ध करते हैं 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);
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.