2013-07-25 2 views
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 열은 "차"에 대한 여러 경기를 가질 수입니다. 쿼리 출력을 위해, "금", "은"및 "unobtanium"결과가 하나의 셀에 상품 열 "gold silver"로 나열되도록 "기본"의 여러 값을 하나의 셀에 배치해야합니다. unobtanium "대신 3 개의 행이 반환됩니다.

답변

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 
+0

감사합니다. group_concat 함수에서 commodity.primary가 아닌 commodity.import를 사용하려고했다고 생각합니다. 나는 그것을했는데 제대로 포맷 된 레코드를 얻지 만 commod 컬럼의 값은 정확하지 않다. "Gold Silver Lead"는 "primary primary primary"를 대신 읽습니다. – Ditchmonkey

+0

그룹 concat에 대해 'commodity.commod'를 원한다고 생각합니다. –

관련 문제