1

我有以下查询:

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”将列在 commod 列“gold silver”的一个单元格中unobtanium”,而不是返回 3 行。

4

2 回答 2

1

您是否尝试过使用 group_concat?(参考:http ://www.mysqlperformanceblog.com/2006/09/04/group_concat-useful-group-by-extension/ )

于 2013-07-25T22:09:33.733 回答
1

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

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

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
于 2013-07-25T22:31:44.097 回答