কমা বিচ্ছিন্ন তালিকা হিসাবে মাইএসকিউএল ফলাফল


129

আমার মতো একটি কোয়েরি চালানো দরকার:

SELECT p.id, p.name, 
       (SELECT name 
          FROM sites s 
         WHERE s.id = p.site_id) AS site_list
  FROM publications p

তবে উপ-নির্বাচনটি উপাত্তের কলামের পরিবর্তে কমা দ্বারা পৃথক করা তালিকাটি ফিরিয়ে দিতে চাই। এটি কি এমনকি সম্ভব, এবং যদি তা হয় তবে কীভাবে?

উত্তর:


250

আপনি এটি সম্পাদন করতে GROUP_CONCAT ব্যবহার করতে পারেন , যেমন কিছু

SELECT p.id, p.name, GROUP_CONCAT(s.name) AS site_list
FROM sites s
INNER JOIN publications p ON(s.id = p.site_id)
GROUP BY p.id, p.name;

10
এছাড়াও, দ্রষ্টব্য নোট করুন যে আপনি যদি পিএইচপিএমইএডমিন ব্যবহার করছেন এবং পৃষ্ঠাটিতে কমা-বিস্মৃত তালিকা আউটপুট করতে চান তবে ব্যবহার করুন GROUP_CONCAT(CAST(s.name AS CHAR))বা অন্যথায় এটি পুরোপুরি অব্যবহারযোগ্য কিছু ফিরিয়ে দেবে [BLOB - 20 Bytes]
ডিভাইস

3
অভিপ্রায়টি ঠিক আছে এবং মাইএসকিউএল এটির অনুমতি দেবে তবে গ্রুপের মাধ্যমে আপনার ব্যবহারের সাথে সতর্কতা অবলম্বন করুন (সাধারণত)। নির্বাচিত তালিকার আইটেমগুলির গ্রোপ বাই অনুচ্ছেদের প্রসঙ্গে বৈধ সমষ্টি হতে হবে। এই ক্ষেত্রে, পি-নাম কঠোরভাবে বৈধ নয়। এসকিউএল স্ট্যান্ডার্ড অনুসারে যে কোনও ডাটাবেস এটিকে ত্রুটি হিসাবে বিবেচনা করবে। এই ক্ষেত্রে, হয় নির্বাচিত তালিকায় MAX (p.name) ব্যবহার করুন বা গ্রুপ দ্বারা গ্রুপে p.name যুক্ত করুন। যেহেতু পল সম্ভবত একটি প্রাথমিক বা অনন্য কী উপস্থাপন করার জন্য পি.আই.ডি. অর্থ বোঝায়, গ্রাহক দ্বারা গ্রুপের পি-নাম যুক্ত করা চূড়ান্ত ফলাফলের উপর কোনও প্রভাব ফেলবে না।
জন আর্মস্ট্রং - এক্সজিসি

উল্লেখ্য প্রতি সেশনের জন্য সর্বোচ্চ দৈর্ঘ্য নির্ধারণ করতে হতে পারে stackoverflow.com/questions/2567000/...
sobelito

অনেক ধন্যবাদ! আপনি আমাকে অনেক সাহায্য করেছেন!
আন্ড্রে অ্যাগোস্টিনহো

11

পরিবর্তে group concat()আপনি ব্যবহার করতে পারেনconcat()

Select concat(Col1, ',', Col2) as Foo_Bar from Table1;

এটি সম্পাদনা শুধুমাত্র মাইএসকিউএল এ কাজ করে; ওরাকল কনক্যাট কেবল দুটি যুক্তি গ্রহণ করে। ওরাকলে আপনি নির্বাচন করুন কল 1 || ',' || কল 2 || ',' || কল 3 থেকে টেবিল 1 থেকে ফুবার হিসাবে ব্যবহার করতে পারেন; SQL সার্ভারে আপনি পাইপের পরিবর্তে + ব্যবহার করবেন would


2
এটি GROUP BY কেস হিসাবে কাজ করবে না, যখন GROUP_CONCAT () একটি একক কলামের বিষয়বস্তু
একত্র করবে

5

এখন কেবল আমি এই পরিস্থিতিটি দেখতে পেয়েছি এবং আশেপাশে আরও কয়েকটি আকর্ষণীয় বৈশিষ্ট্য পেয়েছি GROUP_CONCAT। আমি আশা করি এই বিবরণগুলি আপনাকে আকর্ষণীয় মনে করবে।

সাধারণ GROUP_CONCAT

SELECT GROUP_CONCAT(TaskName) 
FROM Tasks;

ফলাফল:

+------------------------------------------------------------------+
| GROUP_CONCAT(TaskName)                                           |
+------------------------------------------------------------------+
| Do garden,Feed cats,Paint roof,Take dog for walk,Relax,Feed cats |
+------------------------------------------------------------------+

DISTINCT সহ GROUP_CONCAT

SELECT GROUP_CONCAT(TaskName) 
FROM Tasks;

ফলাফল:

+------------------------------------------------------------------+
| GROUP_CONCAT(TaskName)                                           |
+------------------------------------------------------------------+
| Do garden,Feed cats,Paint roof,Take dog for walk,Relax,Feed cats |
+------------------------------------------------------------------+

DISTINCT এবং অর্ডার দিয়ে GROUP_CONCAT

SELECT GROUP_CONCAT(DISTINCT TaskName ORDER BY TaskName DESC) 
FROM Tasks;

ফলাফল:

+--------------------------------------------------------+
| GROUP_CONCAT(DISTINCT TaskName ORDER BY TaskName DESC) |
+--------------------------------------------------------+
| Take dog for walk,Relax,Paint roof,Feed cats,Do garden |
+--------------------------------------------------------+

DISTINCT এবং SEPARATOR সহ GROUP_CONCAT

SELECT GROUP_CONCAT(DISTINCT TaskName SEPARATOR ' + ') 
FROM Tasks;

ফলাফল:

+----------------------------------------------------------------+
| GROUP_CONCAT(DISTINCT TaskName SEPARATOR ' + ')                |
+----------------------------------------------------------------+
| Do garden + Feed cats + Paint roof + Relax + Take dog for walk |
+----------------------------------------------------------------+

GROUP_CONCAT এবং সম্মিলিত কলামগুলি

SELECT GROUP_CONCAT(TaskId, ') ', TaskName SEPARATOR ' ') 
FROM Tasks;

ফলাফল:

+------------------------------------------------------------------------------------+
| GROUP_CONCAT(TaskId, ') ', TaskName SEPARATOR ' ')                                 |
+------------------------------------------------------------------------------------+
| 1) Do garden 2) Feed cats 3) Paint roof 4) Take dog for walk 5) Relax 6) Feed cats |
+------------------------------------------------------------------------------------+

GROUP_CONCAT এবং গোষ্ঠীভুক্ত ফলাফল অনুমান করুন যে ব্যবহারের আগে নিম্নলিখিত ফলাফলGROUP_CONCAT

+------------------------+--------------------------+
| ArtistName             | AlbumName                |
+------------------------+--------------------------+
| Iron Maiden            | Powerslave               |
| AC/DC                  | Powerage                 |
| Jim Reeves             | Singing Down the Lane    |
| Devin Townsend         | Ziltoid the Omniscient   |
| Devin Townsend         | Casualties of Cool       |
| Devin Townsend         | Epicloud                 |
| Iron Maiden            | Somewhere in Time        |
| Iron Maiden            | Piece of Mind            |
| Iron Maiden            | Killers                  |
| Iron Maiden            | No Prayer for the Dying  |
| The Script             | No Sound Without Silence |
| Buddy Rich             | Big Swing Face           |
| Michael Learns to Rock | Blue Night               |
| Michael Learns to Rock | Eternity                 |
| Michael Learns to Rock | Scandinavia              |
| Tom Jones              | Long Lost Suitcase       |
| Tom Jones              | Praise and Blame         |
| Tom Jones              | Along Came Jones         |
| Allan Holdsworth       | All Night Wrong          |
| Allan Holdsworth       | The Sixteen Men of Tain  |
+------------------------+--------------------------+
USE Music;
SELECT ar.ArtistName,
    GROUP_CONCAT(al.AlbumName)
FROM Artists ar
INNER JOIN Albums al
ON ar.ArtistId = al.ArtistId
GROUP BY ArtistName;

ফলাফল:

+------------------------+----------------------------------------------------------------------------+
| ArtistName             | GROUP_CONCAT(al.AlbumName)                                                 |
+------------------------+----------------------------------------------------------------------------+
| AC/DC                  | Powerage                                                                   |
| Allan Holdsworth       | All Night Wrong,The Sixteen Men of Tain                                    |
| Buddy Rich             | Big Swing Face                                                             |
| Devin Townsend         | Epicloud,Ziltoid the Omniscient,Casualties of Cool                         |
| Iron Maiden            | Somewhere in Time,Piece of Mind,Powerslave,Killers,No Prayer for the Dying |
| Jim Reeves             | Singing Down the Lane                                                      |
| Michael Learns to Rock | Eternity,Scandinavia,Blue Night                                            |
| The Script             | No Sound Without Silence                                                   |
| Tom Jones              | Long Lost Suitcase,Praise and Blame,Along Came Jones                       |
+------------------------+----------------------------------------------------------------------------+

3

আমার ক্ষেত্রে আমাকে মোবাইল নম্বরটির ব্যক্তির সমস্ত অ্যাকাউন্ট নম্বর একত্রিত করতে হবে। সুতরাং আমি এটি অর্জন করতে নিম্নলিখিত কোয়েরি ব্যবহার করেছি।

SELECT GROUP_CONCAT(AccountsNo) as Accounts FROM `tblaccounts` GROUP BY MobileNumber

অনুসন্ধান ফলাফল নীচে:

Accounts
93348001,97530801,93348001,97530801
89663501
62630701
6227895144840002
60070021
60070020
60070019
60070018
60070017
60070016
60070015
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.