Mysql如何在所有结果行的字段上连接

时间:2014-08-14 14:23:30

标签: mysql

是否可以连接(在一个字段中)结果中的所有行 我的表就像那样:

ID    STRING
1      a,aa
2      xxx
3      str
4      aa,xx

我想要像:

ID    STRING    CONCAT
1      a,aa     a,aa xxx str aa,xx
2      xxx      a,aa xxx str aa,xx
3      str      a,aa xxx str aa,xx
4      aa,xx    a,aa xxx str aa,xx

我尝试过GROUP_CONCAT,但那并不是我想要的......

有什么想法吗? 再见

更新2:
实际上,这是我的要求

SELECT DISTINCT 
(SELECT GROUP_CONCAT(LABEL_ID) FROM DOCUMENT WHERE ENTITY_ID = `p`.id) as label,
`p`.*,
(6371*acos(cos(radians(48.8817))*cos(radians(LATITUDE))*cos(radians(LONGITUDE) - radians(2.3822))+sin(radians(48.8817))*sin(radians(LATITUDE)))) AS `dist`, 
`a`.`NUMBER_COMM`, 
`a`.`AVE` 
FROM `PRO` AS `p` 
INNER JOIN `PRO_JOB_RELATION` AS `j_rel` ON p.ID = j.ID_PRO 
INNER JOIN `COMM` AS `a` ON p.ID = a.ID_PRO WHERE (p.ETAT = 1) 
AND (j.ID_METIER = '15') 
HAVING (dist <= 300 and dist <= `p`.RAYON) 
ORDER BY ((AVE * 4) + ((5 * NUMBER_COMM ) / 100)) - ((( 5 * dist) / 100) * 20) / 3 DESC,  `CHECKED` DESC

我得到了这个结果:

ID    LABEL    OTHER
1      2,3      ...
2     NULL      ...
3      2        ...
4      8,2      ...

我真正需要的是这样的东西:

ID    LABEL    OTHER  LABEL_CONCAT
1      2,3      ...      2,3,8
2     NULL      ...      2,3,8
3      2        ...      2,3,8
4      8,2      ...      2,3,8

我无法做到这一点......你能帮助我吗?

2 个答案:

答案 0 :(得分:1)

您可以使用group_concat,但在子查询中

select id, string, (select group_concat(string SEPARATOR ' ') 
                    from Table1)
from Table1

请参阅SqlFiddle

答案 1 :(得分:0)

是。有可能的。你可以使用GROUP_CONCAT聚合函数来完成它。

但是您指定的结果将需要SELECT列表中的子查询或内联视图的JOIN,例如。

SELECT t.id      AS `ID
     , t.string  AS `STRING`
     , c.gc      AS `CONCAT`
  FROM mytable t
 CROSS 
  JOIN ( SELECT GROUP_CONCAT(s.string ORDER BY s.id) AS `gc`
          FROM mytable s
       ) c 
 ORDER BY t.id

请注意,GROUP_CONCAT的回复受某些系统变量max_group_concat_len(类似的东西)和max_allowed_packet的限制。