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

सबक्वेरी पर GROUP_CONCAT के लिए अजीब परिणाम

आपकी क्वेरी थोड़ी अजीब है।

select name, GROUP_CONCAT(DISTINCT(id) SEPARATOR "-") AS id FROM (
        (select "APN" AS name, GROUP_CONCAT(DISTINCT(site.id) SEPARATOR "-") AS id  from site WHERE id IN (138,147,8918,8916,9033,9240,97,9038,8886,9036,9067,146,37,9127,52,9031,23,8635,8665,46,39,18,33,9035,137,9051,8766,25,20,9160,133,8636,9021,8655,21,42,8757,22,9017,77,9037,44,49,9323,55,74,150,8,67,1,8928,58,9025,9221,9019,9069,9214,9176,95,40,9335,168,9260,8641,9227,9258,24,50,29,9073,12,36,8882,9,43,76,9032,51,9060,96,8922,9212,14,9095,28,9213,31,41,68,9027,8884,9023,9059,9034,9016,11,61,9229,8761,9225,8937,9018,9121,9119,8659,8926,9096,57,9083,8662,9232,149,8643,88,19,8660,10,8936,9210,9241,17,8872)) 
    UNION ALL 
        (select "smart" AS name, GROUP_CONCAT(DISTINCT(site.id) SEPARATOR "-") AS id from site WHERE id IN (9129,8981,9136,9169,9170,9171,9172,9297,9147,9155,9139,9138,9142,9296,8987,9216,9252,9320,8951,8945,8952,8965,8963,9012,9192,8938,8941,8968,8977,9117,9135,9140,9143,9295,9298,9137,8988,8989,8992,9164,9156,9165,9168,9173,8953,8999,8939,8940,8942,8943,8954,8956,8957,8959,8960,8964,8971,8972,8973,8974,8982,9000,9001,9003,8950,8978,8979,8983,9002,9005,8984,8955,8986,8980,8993,9008,9010,8949,8998,9150,9122,8944,8946,8948,9006,9009,9013,9128,9215,9321,9011,9154,8970,8975,8994,9070,8966,8958,9007,9014))
) t GROUP BY name;

के बराबर है:

    (select "APN" AS name, GROUP_CONCAT(DISTINCT(site.id) SEPARATOR "-") AS id  from site WHERE id IN (138,147,8918,8916,9033,9240,97,9038,8886,9036,9067,146,37,9127,52,9031,23,8635,8665,46,39,18,33,9035,137,9051,8766,25,20,9160,133,8636,9021,8655,21,42,8757,22,9017,77,9037,44,49,9323,55,74,150,8,67,1,8928,58,9025,9221,9019,9069,9214,9176,95,40,9335,168,9260,8641,9227,9258,24,50,29,9073,12,36,8882,9,43,76,9032,51,9060,96,8922,9212,14,9095,28,9213,31,41,68,9027,8884,9023,9059,9034,9016,11,61,9229,8761,9225,8937,9018,9121,9119,8659,8926,9096,57,9083,8662,9232,149,8643,88,19,8660,10,8936,9210,9241,17,8872)) 
    UNION ALL 
    (select "smart" AS name, GROUP_CONCAT(DISTINCT(site.id) SEPARATOR "-") AS id from site WHERE id IN (9129,8981,9136,9169,9170,9171,9172,9297,9147,9155,9139,9138,9142,9296,8987,9216,9252,9320,8951,8945,8952,8965,8963,9012,9192,8938,8941,8968,8977,9117,9135,9140,9143,9295,9298,9137,8988,8989,8992,9164,9156,9165,9168,9173,8953,8999,8939,8940,8942,8943,8954,8956,8957,8959,8960,8964,8971,8972,8973,8974,8982,9000,9001,9003,8950,8978,8979,8983,9002,9005,8984,8955,8986,8980,8993,9008,9010,8949,8998,9150,9122,8944,8946,8948,9006,9009,9013,9128,9215,9321,9011,9154,8970,8975,8994,9070,8966,8958,9007,9014))

नाम और आईडी के आधार पर पैरेंट ग्रुपिंग की कोई आवश्यकता नहीं है जब तक कि आपकी मूल क्वेरी आईडी के समान समूह के साथ कई एपीएन पंक्तियाँ नहीं बनाती।

अपने प्रश्न पर वापस जाएं :आप सही हैं कि group_concat की अधिकतम लंबाई 1024 है लेकिन एक सॉर्ट / यूनियन ऑपरेशन आगे 1/3 (1024/3 =341) तक छोटा हो जाता है। (हालांकि यह ज्ञात है लेकिन इसका समर्थन करने के लिए कोई आधिकारिक दस्तावेज उपलब्ध नहीं है)

अपने मामले में, बस समूह कॉनकैट अधिकतम लंबाई मान बढ़ाएँ:

SET group_concat_max_len = 5000;

और इससे आपका वांछित आउटपुट बिना कांट-छांट के देना चाहिए।

आप अस्थायी टेबल बना सकते हैं और उन्हें संघ बना सकते हैं, या आप grou_concat परिणाम को एक चर में आउटपुट कर सकते हैं। दोनों तरह से grop_concat अपने मूल डिफ़ॉल्ट मान से छोटा हो जाएगा।




  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_query सब कुछ करता है

  2. Mysqld.service के लिए कार्य विफल रहा systemctl स्थिति देखें mysqld.service

  3. उपयोगकर्ता बनाने के लिए MySQL संग्रहीत प्रक्रिया

  4. MySQL ट्रिगर उसी तालिका में पंक्तियों को अपडेट नहीं कर सकते हैं जिसे ट्रिगर को सौंपा गया है। सुझाए गए उपाय?

  5. MySQL में nth रैंक कैसे पता करें?