複数のテーブルを1つの行として結合した結果を取得する


8

次の2つのテーブルがあります。

table1:

id | name
---------
1  | john
2  | jack

table2:

id | profile_id | institution
-----------------------------
1  | 1          | SFU
2  | 1          | UBC
3  | 2          | BU
4  | 2          | USC
5  | 2          | SFU

ユーザーIDを使用してユーザーに関するすべての情報を取得したい場合は、これを使用して簡単に参加できます。

select a.id, a.name, b.institution from table1 a, table2 b
where a.id = USER_ID and a.id = b.profile_id

USER_ID = 1の場合、次を返します。

id | name | institution
-----------------------
1  | john | SFU
1  | john | UBC

私が必要なのは、実際には複数の行ではなく1つの一意の行です。このようなものを手に入れることは可能ですか?(私はそれをするために何かを見たことはありませんが、わかりません)

id | name | institution
-----------------------
1  | john | [SFU, UBC]

回答:


8

GROUP_CONCAT関数を使用できます

SELECT a.id, a.name, CONCAT('[',GROUP_CONCAT(b.institution),']') institution
FROM table1 a INNER JOIN table2 b
ON a.id = b.profile_id
WHERE a.id = USER_ID
GROUP BY a.id, a.name;

または元のクエリで

select a.id, a.name, CONCAT('[',GROUP_CONCAT(b.institution),']') institution
from table1 a, table2 b where a.id = USER_ID and a.id = b.profile_id
group by a.id, a.name;

試してみる !!!


GROUP_CONCATが魔法です!歓声
AliBZ 2013

@RolandoMySQLDBA "...そしてここで私の時計は終わります":P、私は長い間これを探していました。ありがとう
PHP Mentor
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.