/ / मैं MySQL तालिका में मान कैसे अपडेट कर सकता हूं यदि अन्य मान डुप्लीकेट हैं? - mysql, डुप्लिकेट

मैं MySQL तालिका में मान कैसे अपडेट कर सकता हूं यदि अन्य मान डुप्लीकेट हैं? - mysql, डुप्लिकेट

मेरे पास निम्नलिखित संरचना के साथ टेबल है:

TBL1

COL1 COL2 COL2
---- ---- ----
A    B    1
B    C    3
A    C    11
A    D    13
B    D    10

मैं col3 को कैसे अपडेट कर सकता हूं यदि col1 में मान डुप्लिकेट हैं?

मैं चाहता हूं कि col3 में मान सबसे बड़े पाए गए अपडेट हो जाएं।

परिणामस्वरूप तालिका को देखने के लिए:

COL1 COL2 COL2
---- ---- ----
A    B    13
B    C    10
A    C    13
A    D    13
B    D    10

अग्रिम में धन्यवाद !!!

उत्तर:

उत्तर № 1 के लिए 1

वांछित डेटा के साथ एक अद्यतन के साथ शामिल हो गए। सहसंबंधित subqueries अच्छी तरह से नहीं हैं:

update T inner
join ( select c1, max( c3) as m from T) T2
on T.c1 = T2.c1
set T.c3 = T2.m;

परीक्षण:

mysql> create table T ( c1 char(1), c3 int ) ;
Query OK, 0 rows affected (0.15 sec)

mysql> insert into T values ( "A", 1),("B",3),("A",11),("A",13);
Query OK, 4 rows affected (0.02 sec)
Records: 4  Duplicates: 0  Warnings: 0

mysql> select * From T;
+------+------+
| c1   | c3   |
+------+------+
| A    |    1 |
| B    |    3 |
| A    |   11 |
| A    |   13 |
+------+------+


mysql> update T inner join ( select c1, max( c3) as m from T) T2
on T.c1 = T2.c1 set T.c3 = T2.m;
Query OK, 2 rows affected (0.07 sec)
Rows matched: 3  Changed: 2  Warnings: 0

mysql> select * from T;
+------+------+
| c1   | c3   |
+------+------+
| A    |   13 |
| B    |    3 |
| A    |   13 |
| A    |   13 |
+------+------+
4 rows in set (0.00 sec)

उत्तर № 2 के लिए 1

आप subquery में COL3 से उच्चतम मान का चयन कर सकते हैं और उपखंड से मूल्य के साथ अपनी तालिका पर एक अद्यतन क्वेरी कर सकते हैं

UPDATE TBL1 SET COL3 = (SELECT COL3 FROM TBL1 WHERE COL1 = "A" ORDER BY COL3 DESC LIMIT 0,1) AS a WHERE COL1 = "A"

उत्तर № 3 के लिए 1

सबसे पहले, अपने नमूना डेटा लोड करते हैं

mysql> drop database if exists dilyan_kn;
Query OK, 1 row affected (0.04 sec)

mysql> create database dilyan_kn;
Query OK, 1 row affected (0.00 sec)

mysql> use dilyan_kn
Database changed
mysql> create table TBL1
-> (col1 char(1),col2 char(1),col3 int);
Query OK, 0 rows affected (0.11 sec)

mysql> insert into TBL1 values
-> ( "A" , "B" ,  1 ),
-> ( "B" , "C" ,  3 ),
-> ( "A" , "C" , 11 ),
-> ( "A" , "D" , 13 ),
-> ( "B" , "D" , 10 );
Query OK, 5 rows affected (0.06 sec)
Records: 5  Duplicates: 0  Warnings: 0

mysql> select * from TBL1;
+------+------+------+
| col1 | col2 | col3 |
+------+------+------+
| A    | B    |    1 |
| B    | C    |    3 |
| A    | C    |   11 |
| A    | D    |   13 |
| B    | D    |   10 |
+------+------+------+
5 rows in set (0.00 sec)

mysql>

प्रश्न में वांछित आउटपुट को देखते हुए, ऐसा लगता है कि आप किसी दिए गए col1 के लिए col3 का उच्चतम मूल्य चाहते हैं।

उदाहरण

Col1 = ए के लिए, आपके पास अलग-अलग मान 1, 11, और 13. 13 उच्चतम हैं

Col1 = B के लिए, आपके पास अलग-अलग मान 3 और 10 हैं। 10 उच्चतम है

आपको किसी सबक्वायरी की आवश्यकता होगी जो किसी दिए गए col1 के लिए col3 का उच्चतम मूल्य पाता है।

यहां वह प्रश्न है:

SELECT col1,MAX(col3) maxcol3
FROM TBL1 GROUP BY col1;

चलो उस subquery चलाओ

mysql> SELECT col1,MAX(col3) maxcol3
-> FROM TBL1 GROUP BY col1;
+------+---------+
| col1 | maxcol3 |
+------+---------+
| A    |      13 |
| B    |      10 |
+------+---------+
2 rows in set (0.00 sec)

mysql>

आइए इस सबक्वायरी का उपयोग पूरे टेबल के साथ जुड़ने के लिए करें और जब भी सबक्वायरी का col1 कॉलम तालिका के कॉल 1 कॉलम से मेल खाता है तो col3 कॉलम को अपडेट करें। यह क्वेरी है:

UPDATE
(
SELECT col1,MAX(col3) maxcol3
FROM TBL1 GROUP BY col1
) A
INNER JOIN TBL1 B USING (col1)
SET B.col3 = A.maxcol3;

आइए चलें कि अद्यतन जॉइन क्वेरी करें और सभी टीबीएल 1 चुनें

mysql> UPDATE
-> (
->     SELECT col1,MAX(col3) maxcol3
->     FROM TBL1 GROUP BY col1
-> ) A
-> INNER JOIN TBL1 B USING (col1)
-> SET B.col3 = A.maxcol3;
Query OK, 3 rows affected (0.05 sec)
Rows matched: 5  Changed: 3  Warnings: 0

mysql> select * from TBL1;
+------+------+------+
| col1 | col2 | col3 |
+------+------+------+
| A    | B    |   13 |
| B    | C    |   10 |
| A    | C    |   13 |
| A    | D    |   13 |
| B    | D    |   10 |
+------+------+------+
5 rows in set (0.00 sec)

mysql>

मिशन पूरा हुआ !!!

5 पंक्तियों का मिलान करने का कारण, लेकिन केवल 3 ही इस तथ्य से उपजी हैं कि पंक्तियां (col1, col3) ("ए", 13) और ("बी", 10) पहले से ही अधिकतम मान हैं और इसकी आवश्यकता नहीं है बदले जाने वाला।