1

次のスキーマを検討してください。

create table A
(
    id int primary id
)

create table B
(
    a_id int,
    s varchar(255)
)

そして、次のクエリ:

select A.id, sum(1), ??? concat_join(B.s) ???
from A left join B on A.id = B.a_id group by A.id

A と B の間には 1 対多の関係があるため、複数の行が 1 つにグループ化されます。「concat_join」の望ましい動作は、グループ内の各 B が、それらを連結して (おそらくスペース区切りを使用して) 1 つの文字列に結合することです。

これが MySQL 5.5 であると表現する方法はありますか?

4

1 に答える 1

4

GROUP_CONCATを使用する

select A.id, sum(1), GROUP_CONCAT(B.s)
from A left join B on A.id = B.a_id 
group by A.id

デフォルトでは、文字列はコンマで区切られています。変更したい場合は、SEPARATORキーワードを追加し、

select A.id, sum(1), GROUP_CONCAT(B.s SEPARATOR ';')
from A left join B on A.id = B.a_id 
group by A.id
于 2012-11-17T14:57:39.950 に答える