我有以下查询:
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行。
答案 0 :(得分:1)
您是否尝试过使用group_concat? (参考:http://www.mysqlperformanceblog.com/2006/09/04/group_concat-useful-group-by-extension/)
答案 1 :(得分: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