Mysql
 sql >> डेटाबेस >  >> RDS >> Mysql

MySQL अपडेट स्टेटमेंट केवल पहली पंक्ति से मेल खाता है

अपने प्रश्न के अपडेट के आधार पर आप इसे इस तरह कर सकते हैं

UPDATE t1 JOIN
(
  SELECT id, GROUP_CONCAT(DISTINCT value ORDER BY value) value
    FROM t2
   GROUP BY id
) q
    ON t1.id = q.id
   SET t1.value = q.value

परिणाम:

+------+-------+
| id   | value |
+------+-------+
|    1 | 1,2,3 |
+------+-------+

यह रहा SQLFiddle डेमो

अद्यतन करें: आपकी टिप्पणियों के आधार पर जिसने आपके प्रश्न को फिर से बदल दिया। t1 . में मानों की एक सीमित स्ट्रिंग को अपडेट करने में सक्षम होने के लिए t2 . में मानों के आधार पर t1.value . को विभाजित करने के लिए आपको एक संख्या (टैली) तालिका की सहायता की आवश्यकता होगी मक्खी पर। आप आसानी से इस तरह की तालिका बना सकते हैं

CREATE TABLE tally(n INT NOT NULL PRIMARY KEY);

INSERT INTO tally (n)
SELECT a.N + b.N * 10 + 1 n
 FROM 
(SELECT 0 AS N UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9) a
,(SELECT 0 AS N UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9) b
ORDER BY n

वह स्क्रिप्ट 1 से 100 तक की संख्याओं के अनुक्रम के साथ एक तालिका बनाती है जो प्रभावी रूप से 100 सीमांकित मानों को विभाजित करने की अनुमति देगी। अगर आपको कम या ज्यादा की जरूरत है तो आप आसानी से स्क्रिप्ट को एडजस्ट कर सकते हैं।

अब t1.value को अपडेट करने के लिए आप कर सकते हैं

UPDATE t1 JOIN
(
  SELECT id, GROUP_CONCAT(value ORDER BY value) value
    FROM
  (
    SELECT id, SUBSTRING_INDEX(SUBSTRING_INDEX(t1.value, ',', n.n), ',', -1) value
      FROM t1 CROSS JOIN tally n
     WHERE n.n <= 1 + (LENGTH(t1.value) - LENGTH(REPLACE(t1.value, ',', '')))
     UNION
    SELECT id, value
      FROM t2
  ) v
   GROUP BY id
) q
    ON t1.id = q.id
   SET t1.value = q.value

मान लें कि आपके पास t1 . में है

| ID | VALUE |
|----|-------|
|  1 |   1,4 |

अपडेट का परिणाम होगा

| ID |   VALUE |
|----|---------|
|  1 | 1,2,3,4 |

यह रहा SQLFiddle डेमो

यह सब लंबे समय में कहा जा रहा है आप बेहतर तरीके से अपने db स्कीमा पर पुनर्विचार करें और अपने डेटा को सामान्य करें . यह आपके डेटा को सामान्य रूप से बनाए रखने और क्वेरी करने की अनुमति देकर बड़े समय का भुगतान करेगा।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL बनाम पीडीओ

  2. mysqli अंतिम सम्मिलित आईडी

  3. केवल str_replace के साथ Sql इंजेक्शन सुरक्षा

  4. MyISAM से InnoDb में टेबल बदलने का समय कब है?

  5. सी # उपयोगकर्ता नियंत्रण के माध्यम से MySQL से कनेक्ट करें