SQL查询展平了1-many关系表的数据

时间:2017-12-07 09:56:33

标签: java mysql sql jdbc

用户表

String gender;
if(Math.random() > 0.5) gender  = "MALE";
else gender = "FEMALE";

设备表

id    | emailAddress
1       user@test.com
2       user2@test.com

我想在列中展平相关设备表的结果。这是我尝试使用子查询。

 uuid   | user_id
 xyz     1
 abc     1
 zzz     1
 a11     2
 g222    2

我希望我的结果输出是这样的。

SELECT id, emailAddress, (
    SELECT uuid FROM device 
    WHERE user_id = user.id
) AS devices 
FROM user;

但我也希望明确我的目标,或许是为了实现我想要的横向方法,最终我想在我的Java代码中填充这个UserBean。即获取所有用户和每个用户设备清单。

1, user@test.com  xyz, abc, zzz
2, user2@test.com a112, g222

2 个答案:

答案 0 :(得分:1)

您可以使用 GROUP_CONCAT uuidid连接emailAddress列值组。

<强>查询

select t1.`id`, t1.`emailAddress`,
group_concat(t2.`uuid`)
from `users` t1
join `devices` t2
on t1.`id` = t2.`user_id`
group by t1.`id`, t1.`emailAddress`;

<强> Find a demo here

答案 1 :(得分:0)

如果要展平结果,请使用MySQL GROUP_CONCAT Function。你应该加入你的表格,如下所示:

SELECT A.id, A.emailAddress, GROUP_CONCAT(DISTINCT B.uuid ORDER BY B.uuid SEPARATOR ',') AS devices 
FROM `user` A LEFT JOIN device B
ON A.id=B.user_id
GROUP BY A.id, A.emailAddress;

请参阅SQL小提琴上的DEMO