将多个结果合并到一行

时间:2013-07-25 22:07:07

标签: mysql sql

我有以下查询:

SELECT location.dep_id, location.county, names.name, coords.lat_dec, coords.lon_dec, commodity.commod
FROM location, names , coords, commodity
WHERE location.dep_id=names.dep_id AND names.line=1 AND location.dep_id=coords.dep_id AND location.dep_id=commodity.dep_id AND commodity.import='primary' AND location.state_prov='nevada'

问题是commodity.import列可以有多个匹配“primary”。对于查询输出,我需要的是将“primary”的多个值放在一个单元格中,以便结果“gold”,“silver”和“unobtanium”将列在商品列中的一个单元格中“gold silver” unobtanium“而不是返回3行。

2 个答案:

答案 0 :(得分:1)

答案 1 :(得分:1)

首先,您需要学习正确的连接语法。它更强大(例如,它提供对leftright外连接的支持;它使查询更容易理解;它可以防止因缺少连接条件而导致的错误。

您的问题的答案是汇总数据,然后将值组合在一起:

SELECT location.dep_id, location.county, names.name, coords.lat_dec,
       coords.lon_dec,
       group_concat(commodity.commod separator ' ') as commods
FROM location join
     names
     on location.dep_id=names.dep_id  join
     coords
     on location.dep_id=coords.dep_id join
     commodity
     on location.dep_id=commodity.dep_id
WHERE AND names.line=1 AND commodity.import='primary' AND location.state_prov='nevada'
group by location.dep_id;

我认为这是对的。 group_concat()的第一个参数应该是commodity中要组合在一起的列。

如果有重复项,您可以使用以下方法删除它们:

       group_concat(distinct commodity.commod separator ' ') as commod