在 Mysql 中将一行连接到另一行中的多行 table
Join one row to multiple rows in another table in Mysql
我有两个 table,分别称为(用户)和(部门),一个用户可以拥有任意数量的部门)。例如:
用户
id name
-----------
1 user1
2 user2
3 user3
部门
id name
-----------
1 dept1
2 dept2
3 dept3
我已经创建了另一个 table 调用 user_dept
user_dept
u_id d_name
----------------
1 1
1 2
1 3
2 2
2 3
第三 table (user_dept) 列来自用户 table 和部门 table.
我想要的是给用户打电话,部门之间用 (,) 分隔成一行。
您可以使用 group_concat()
和相关的子查询:
select
u.*,
(
select group_concat(d.name)
from user_departments ud
inner join departments d on d.d_id = ud.id
where ud.u_id = u.id
) dept_names
from users u
这也可以通过连接和外部聚合来完成:
select u.*, group_concat(d.name) dept_names
from users u
left join user_departments ud on ud.u_id = u.id
left join departments d on d.d_id = ud.id
group by u.id
我有两个 table,分别称为(用户)和(部门),一个用户可以拥有任意数量的部门)。例如:
用户
id name
-----------
1 user1
2 user2
3 user3
部门
id name
-----------
1 dept1
2 dept2
3 dept3
我已经创建了另一个 table 调用 user_dept
user_dept
u_id d_name
----------------
1 1
1 2
1 3
2 2
2 3
第三 table (user_dept) 列来自用户 table 和部门 table.
我想要的是给用户打电话,部门之间用 (,) 分隔成一行。
您可以使用 group_concat()
和相关的子查询:
select
u.*,
(
select group_concat(d.name)
from user_departments ud
inner join departments d on d.d_id = ud.id
where ud.u_id = u.id
) dept_names
from users u
这也可以通过连接和外部聚合来完成:
select u.*, group_concat(d.name) dept_names
from users u
left join user_departments ud on ud.u_id = u.id
left join departments d on d.d_id = ud.id
group by u.id