从另一列的SQL查询中连接结果

时间:2017-11-10 15:56:18

标签: mysql sql group-by

SELECT DISTINCT * FROM ( SELECT hostname, table2.user-id, table2.user-team from
 INNER JOIN table2 on table1.id = table2.id) 

所以目前我的SQL查询输出了这个:

hostname user-id     user-team
a           1           alpha   
a           2            beta 
b           3            beta
c           4           alpha
c           1            null
c           3           alpha

但我想要的是这样的:

hostname user-id     user-team
a           1, 2      alpha, beta   
b           3            beta
c           4, 1, 3     alpha

我尝试在查询结尾处使用GROUP BY hostname语句,并GROUP_CONCAT(DISTINCT user_id SEPARATOR ', '), GROUP_CONCAT(DISTINCT user_team SEPARATOR ', '),

但是这只会返回第一个主机名结果以及user-id和team-id可能的所有值。我觉得我很亲近,但我无法得到它。有帮助吗?

(目前它返回)

hostname    user-id      user-team
a            1,2,3,4       alpha, beta

将此作为SQL查询

SELECT DISTINCT * 
FROM ( SELECT hostname, 
              GROUP_CONCAT(DISTINCT table2.user-id SEPARATOR(', '),
              GROUP_CONCAT(DISTINCT table2.team-id SEPARATOR(', ')
       from table1
       INNER JOIN table2 on table1.id = table2.id) 
GROUP BY hostname

虽然查询不是100%准确,但这就是它们中的逻辑(它们只包含了我在现实世界中遇到的更多列。)

1 个答案:

答案 0 :(得分:0)

我想你错过了GROUP BY

<强> SQL DEMO

SELECT hostname,
       GROUP_CONCAT(DISTINCT user_id SEPARATOR  ', ') as users, 
       GROUP_CONCAT(DISTINCT user_team SEPARATOR  ', ') as teams
FROM Table1
GROUP BY hostname 

<强>输出

| hostname |   users |       teams |
|----------|---------|-------------|
|        a |    1, 2 | alpha, beta |
|        b |       3 |        beta |
|        c | 4, 1, 3 |       alpha |

编辑:编辑问题后,问题是您将GROUP BY放在子查询之外