MySQL-具有匹配列的单元格内容列表

时间:2019-02-20 15:44:07

标签: mysql

SQL查询让我望而却步。我能够使用匹配的软件来显示所有行,并且可能可以理清如何从computerID中获取计算机名,但是获得实际所需的输出只是我自己。 甚至提出问题都是具有挑战性的,但是我们走了。

我有一张表,列出了装有每种软件的计算机。这些计算机由computerID标识,并且存在第二个表,该表将computerID与计算机名相关联。 我需要的是具有每个软件的计算机名称的列表。

软件表

----------------------------
| computerID | software    |
----------------------------
|     1      | 7-zip       |
----------------------------
|     1      | winzip      |
----------------------------
|     2      | 7-zip       |
----------------------------
|     2      | chrome      |
----------------------------
|     3      | winzip      |
----------------------------
|     3      | putty       |
----------------------------

计算机表

-----------------------------
| computerID | computerName |
-----------------------------
|     1      |     PC1      |
-----------------------------
|     2      |     PC2      |
-----------------------------
|     3      |     PC3      |
-----------------------------

所需的输出是:

7-zip: PC1, PC2
chrome: PC2
putty: PC3
winzip: PC1, PC3

有人可以帮助将其放入查询吗?

谢谢, 院长

2 个答案:

答案 0 :(得分:0)

您必须查看JOINS和AGGREGATE FUNCTIONS,尤其是GROUP_CONCAT:

SELECT CONCAT(A.computerName, ': ', 
       GROUP_CONCAT(B.software)) AS RESULT
FROM Computer A INNER JOIN Software B ON A.computerID = B.computerID
GROUP BY A.computerName

答案 1 :(得分:0)

太棒了。非常感谢。那只是我需要的启动。结果查询为:

SELECT concat(t1.NAME, ":",
  GROUP_CONCAT(t2.name))
FROM `software` t1 JOIN computers t2 ON t1.computerid=t2.computerid 
GROUP BY t1.name

再次感谢。