سؤال

وأحتاج لتشغيل استعلام مثل:

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

ولكن أود الفرعي حدد لإرجاع قائمة مفصولة بفواصل بدلا من عمود من البيانات. هل هذا ممكن حتى، وإذا كان الأمر كذلك، كيف؟

هل كانت مفيدة؟

المحلول

ويمكنك استخدام 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;

نصائح أخرى

وبدلا من استخدام group concat() يمكنك استخدامها فقط concat()

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

وتحرير هذا يعمل فقط في الخلية. أوراكل CONCAT لا يقبل إلا حجتين. في أوراكل يمكنك استخدام شيء من هذا القبيل حدد COL1 || '،' || || col2 '،' || COL3 كما foobar من TABLE1. في مزود خدمة ستستخدم + بدلا من الأنابيب.

في حالتي لدي لسلسلة عن رقم الحساب من شخص من رقم الهاتف المحمول هي فريدة من نوعها. حتى لقد استخدمت الاستعلام التالي لتحقيق ذلك.

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
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top