2017-11-30 12 views
3

나는이 두 테이블과 두 번째 테이블의 사용 관계SQL의 GROUP_CONCAT 모든 데이터를 얻을 수 없습니다

table1 
id name 
--------- 
1 alpha 
2 beta 

table2 
id name relation 
------------------- 
1 2015 2 
2 2016 2 
3 2017 2 
4 2018 2 
내가

name data 
------------------------- 
beta 2015,2016,2017,2018 
alpha NULL 
나는 다음과 같은 SQL 쿼리를 시도

을보고 싶어

하지만 출력은 내가 원하는 것이 아니다

내가 사용

SELECT 
    t1.name, 
    GROUP_CONCAT(t2.name SEPARATOR ',') 
FROM table1 AS t1 
LEFT JOIN table2 AS t2 
    ON t2.relation = t1.id 

출력 :

alpha 2015,2016,2017,2018 

알파는 다른 관련 tablature에서 아무 값도 얻지 못합니다. 출력의 값은 베타에 속합니다. 바이올린을위한

+0

** G ** ROUP_CONCAT ... – jarlh

답변

3

당신이 필요로하는 GROUP BY :

SELECT t1.name, 
     GROUP_CONCAT(t2.name SEPARATOR ',') 
FROM table1 t1 LEFT JOIN 
    table2 t2 
    ON t2.relation = t1.id 
GROUP BY t1.name; 

대부분의 데이터베이스 (및 최신 버전의 MySQL)에서는 쿼리가 실패합니다. 집계 쿼리 (GROUP_CONCAT() 때문에)입니다. 그러나 t1.name은 집계 함수에 대한 인수가 아니며 GROUP BY 키가 아닙니다.

MySQL에서는 이러한 유형의 쿼리를 허용합니다. 정확히 한 행을 반환합니다. 결과 집합의 한 행에있는 t1.name 값은 임의의 행에서 가져옵니다.

+0

잘하셨습니다. 나는 이것을하고 싶었다. 고맙다 @ 고든 – vulkan

0

없음 FKS 없습니다 :

CREATE TABLE Table1 (`id` int, `name` varchar(5)) ; 

INSERT INTO Table1 
    (`id`, `name`) 
VALUES 
    (1, 'alpha'), 
    (2, 'beta') 
; 


CREATE TABLE Table2 (`id` int, `name` int, `relation` int); 

INSERT INTO Table2 
    (`id`, `name`, `relation`) 
VALUES 
    (1, 2015, 2), 
    (2, 2016, 2), 
    (3, 2017, 2), 
    (4, 2018, 2) 
; 

진술 :

SELECT 
    t1.name, 
    GROUP_CONCAT(t2.name SEPARATOR ',') -- missing an AS .... => ugly name from fiddle 
FROM table1 AS t1 
LEFT JOIN table2 AS t2 
    ON t2.relation = t1.id 
group by t1.name 

출력 :

name GROUP_CONCAT(t2.name SEPARATOR ',') 
alpha (null) 
beta 2017,2018,2015,2016