Mysql 对3个SQL表中的数据进行分组

Mysql 对3个SQL表中的数据进行分组,mysql,sql,Mysql,Sql,我想匹配一些sql条目,并将它们分组,如下图所示: 工人表 ID | worker ------+-------------- 1 | Smith 2 | John 3 | Luke 工人、工具和使用 worker_id | tool_id -------------+---------- 1 | 1 1 | 2 1 | 3 3

我想匹配一些sql条目,并将它们分组,如下图所示:

工人表

ID    |   worker
------+--------------
1     |    Smith
2     |    John
3     |    Luke
工人、工具和使用

worker_id    |   tool_id
-------------+----------
1            |    1
1            |    2
1            |    3
3            |    1
工具表

tool_id    |   name
-------------+----------
1            |    hammer
2            |    wrenches
3            |    drill
4            |    screwdriver
我想要的匹配应该是这样的:

worker       |   tool
-------------+----------
Smith        |    hammer,wrenches,drill 
Luke         |    hammer
使用Mysql可以做到这一点吗?尝试了一些联合,但没有成功。

尝试使用组_concat()-我假定您的工具表工作人员id为工具id

select worker,group_concat(tool)
from workers_tools_usage w1 left join worker w2 on w1.worker_id=w2.id
left join tools_table t on w1.tool_id=t.tool_id
group by worker

我将把查询写为:

select w.id, w.worker, group_concat(t.tool)
from worker w  join
     workers_tools_usage wtu
     on wtu.worker_id = w.id join
     tools t
     on t.tool_id = wtu.tool_id
group by w.worker w.id;
我的回答有以下原因

  • 如有疑问,不需要外部联接
  • 显示有意义的表别名示例,这些别名是表名的缩写
  • 为所有列提供答案,这些列由它们所属的表限定

再次检查工具表。列名正确吗?是的,它是正确的,我保存工人使用的工具的表格,例如用户id 1使用了工具1、2和3,这就是为什么:史密斯锤、扳手、钻头(在tools表中列出了相应的id。再次检查tools表不是workers\u tools\u usage。是的,你是对的,应该是tool\u id不是worker\u id,我编辑过。第二列可能是tool或name?对于任何在这里遇到问题的MS SQL/TSql用户:如果你在SQL Server 2017+上,你可以使用STRING\u AGG()代替GROUP\u CONCAT()如果您使用的是早期版本,它会变得更复杂。一个问题,在测试过程中发现,如果我在workers_表中有两个条目由于GROUP BY而共享相同的名称,那么在查询后,我们只会得到一个条目,对于workers表中名称值上的任何重复条目都是如此。@bt19…您在合并工作方面似乎非常清楚但根据您的评论,我将工作者id添加到了
分组依据
选择
。您实际上不必选择它,否则您将无法区分这两行之间的差异。
select w.id, w.worker, group_concat(t.tool)
from worker w  join
     workers_tools_usage wtu
     on wtu.worker_id = w.id join
     tools t
     on t.tool_id = wtu.tool_id
group by w.worker w.id;