获取将多个表作为一行联接的结果


8

我有这两个表:

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]

Answers:


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 2014年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.