web-dev-qa-db-ja.com

コンマ区切りリストとしてのMySQLの結果

次のようなクエリを実行する必要があります。

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

しかし、データの列ではなく、コンマで区切られたリストを返すように副選択が欲しいです。これは可能ですか?もし可能なら、どのように?

113
Glen Solsberry

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;
234
Paul Dixon

group concat()を使用する代わりに、concat()のみを使用できます

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

編集はmySQLでのみ機能します。 Oracle concatは2つの引数のみを受け入れます。 Oracleでは、table1からfoobarとしてselect col1 || '、' || col2 || '、' || col3のようなものを使用できます。 SQLサーバーでは、パイプの代わりに+を使用します。

9
Robert Quinn

私の場合、携帯電話番号が一意である人のアカウント番号をすべて連結する必要があります。だから私はそれを達成するために次のクエリを使用しました。

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
3