2016-06-17 1 views
2

열을 선택하고 json_build_object를 사용할 때 PostgreSQL 9.5에 문제가 있습니다. GROUP BY 절에 오류가 있습니다. 이 표는이 표는 다수 -이하위 쿼리를 사용할 때 쿼리에 실패했습니다

Table companie_contact 

    Colonne |   Type   
-----------+-------------------------- 
id  | integer     
id_c  | integer     
id_cm  | integer     

회사의 테이블이 표는 연락처

Table companie 

    Colonne |   Type   
-----------+-------------------------- 
id  | integer     
name  | character varying(255) 

의 테이블 인

Table contact 

    Colonne |   Type   
-----------+-------------------------- 
id  | integer     
lastname | character varying(255) 
firstname | character varying(255) 

:

나는 세 개의 테이블을 가지고 to-many 관계를 사용하여 회사와의 연결을 연결하고 그 반대의 경우도 마찬가지입니다. 나는이 쿼리를 실행하면

모든

SELECT co.id, 
json_build_object(
    'lastname', co.lastname, 
    'firstname', co.firstname) AS contact, 
array_agg(c.name) AS companies 
FROM companie AS c 
INNER JOIN companie_contact AS vs 
ON c.id = vs.id_cm 
INNER JOIN contact AS co 
ON co.id = vs.id_c 
GROUP BY co.id; 

내가

id |     contact     | companies 
----+----------------------------------------------+------------- 
    1 | {"lastname" : "some", "firstname" : "one"} | {A,B,D,E,F} 
    4 | {"lastname" : "some", "firstname" : "two"} | {A} 
    2 | {"lastname" : "some", "firstname" : "three"} | {B} 

얻을 작동하지만 내가보기 또는 아래

-- Imagine that the views are more complex than that 
CREATE VIEW view_contact AS SELECT * FROM contact 

CREATE VIEW view_companie AS SELECT * FROM companie 

SELECT co.id, 
json_build_object(
    'lastname', co.lastname, 
    'firstname', co.firstname) AS contact, 
array_agg(c.name) AS companies 
FROM view_companie AS c 
INNER JOIN companie_contact AS vs 
ON c.id = vs.id_cm 
INNER JOIN view_contact AS co 
ON co.id = vs.id_c 
GROUP BY co.id; 

처럼 하위 쿼리 로 연락처 및 대기업을 교체 할 때 이 오류가 있습니다.

ERROR: column "co.lastname" must appear in the GROUP BY clause or be used in an aggregate function 
LINE 1: SELECT co.id,json_build_object('lastname', co.lastname, 'fi... 
나는이 오류가 왜, 내가 웹에 내 특정 문제에 도움을

감사를 해결책을 찾지 못했습니다 모르는

PS : 난 내 영어 죄송합니다

프랑스어
+0

당신이 손에서 작동하지 않는 쿼리가 있습니까? 그것은 오류와 함께 도움이 될 것이지만 다른 사람들은 이미 주어진 사실을 기반으로 이미 대답 할 수 있습니다 ;-) – Dilettant

답변

0

당신은 시도 할 수 있습니다 :

SELECT co.id, 
json_build_object(
    'lastname', co.lastname, 
    'firstname', co.firstname) AS contact, 
array_agg(c.name) AS companies 
FROM companie AS c 
INNER JOIN companie_contact AS vs 
ON c.id = vs.id_cm 
INNER JOIN contact AS co 
ON co.id = vs.id_c 
GROUP BY co.id, co.firstname, co.lastname,c.name ; 
+0

더 많은 필드가 있으면 작동하지만 실제로 더러워집니다. –

+0

집계 함수에 추가 GROUP BY 문이 자주 필요합니다. http://www.w3schools.com/sql/sql_groupby.asp – ThiepLV

+0

더 많은 필드를 집계 함수에 전달하려면 group by 절에 추가해야합니다. – ThiepLV

관련 문제