2017-11-30 3 views
3

私は2台と第2のテーブルの使用関係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 

アルファは、他の関連するタブ譜では値を取得しません。出力の値はベータに属します。フィドルのため

+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では、このタイプのクエリが許可されています。これは、正確に1つの行を返します。結果セットの1行にあるt1.nameの値は、任意の行から得られます。

+0

良い仕事。私はこれをやりたかった。ありがとう@Gordon – 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