mySQL - 查询将值组合在一起

时间:2014-07-29 15:22:18

标签: mysql sql

我有一个查询(下面),它返回ID值和另外两个相关值(ReplacesReference)。查询返回2条记录。我想返回一条记录,所以我需要连接第一个" ReplacesReference"使用逗号','和第二个"替换参考"值。

我的查询如下

    select 
    distinct(c.wiid) as ID,    
    a.reference as ReplacesReference
    from npp_projects a, 
    npp_assoc b, 
    npp_projects c
    where a.id = b.parent_id     
    and b.type = 'replace' 
    and c.id = b.child_id
   and c.reference like '%EN 815%'

它的输出是:

ID          |   ReplacesReference
====================================
CEN3406     |   I.S. EN 815:1996
CEN3406     |   I.S. EN 815:2004

我希望能够返回以下输出:

ID                | ReplacesReference
====================================
CEN3406           |  I.S. EN 815:1996 , I.S. EN 815:2004

非常感谢您的帮助 - 我正在用这个撕掉我的头发!

2 个答案:

答案 0 :(得分:0)

您必须执行以下操作:

SELECT id,GROUP_CONCAT(string SEPARATOR'')FROM TABLE GROUP BY id; http://dev.mysql.com/doc/refman/5.0/en/group-by-functions.html#function_group-concat

答案 1 :(得分:0)

您想使用group by代替select distinct。您使用c.wild周围的括号表示您不了解select distinct的工作原理。它适用于select列表中的所有列。括号不会影响它。查询如下所示:

select p2.wiid as ID,    
       group_concat(distinct p.reference separator ', ') as ReplacesReference
from npp_projects p join
     npp_assoc a
     on p.id = a.parent_id   
     npp_projects p2
     on p2.id = a.child_id
where a.type = 'replace' and p2.reference like '%EN 815%'
group by p2.wild;

我所做的改变:

  • 添加了group_concat()以获取所需的列表。
  • 添加group by以替换select distinct
  • 更改了表别名以使用表缩写,因此查询更容易理解。
  • 将连接语法更改为更强大的显式join语法。作为一个简单的规则:只是不要在from子句中使用逗号。