2016-04-06 9 views
0

上のすべての行(テーブルのいずれか、または両方で)を返し参加:SQLは、私は、コンテンツを分類する列を持つテーブルを持っている状態

id lang string 
1 EN  text1_en 
1 DE  text1_de 
1 FR  text1_fr 
2 EN  text2_en 
2 DE  text2_de 
3 DE  text3_de 
3 FR  text3_fr 

私のような結果を得るためにしたい:

id lang string  id lang string id lang string 
1 EN text1_en 1 DE text1_de 1 FR text1_fr 
2 EN text2_en 2 DE text2_de NULL NULL NULL 
NULL NULL NULL  3 DE text3_de 3 FR text3_fr 

select 
    c1.id,c1.lang,c1.string, 
    c2.id,c2.lang,c2.string, 
    c3.id,c3.lang,c3.string 
from 
    mytable c1 
    left join mytable c2 on (c1.id=c2.id and c2.lang='DE') 
    left join mytable c3 on (c1.id=c3.id and c3.lang='FR') 
where 
    c1.lang='EN' 
order by c1.id 

私はIDの1と2

ための唯一の結果を得るしかし:私は参加する最初に試みた

私はc1.lang='EN'on条件を移動した場合

、私は最初の3列(だけではなくlang='EN'

+0

私は 'どこでc1.lang( 'DE'、 'FR')ではなく' 'c1.langがヌルかc1.lang = 'EN' 'であるが、必要に応じて3行目に移動します。 – andrixnet

答えて

0

あなたは完全外部を使用することができるため、すべてのテーブルの行を取得するには、MySQL以外のサーバに参加します。このクエリは、大きなテーブルでは時間がかかります。

select 
     c1.id,c1.lang,c1.string, 
     c2.id,c2.lang,c2.string, 
     c3.id,c3.lang,c3.string 
    from 
     mytable c1 left join mytable c2 on (c1.id=c2.id and c2.lang='DE') 
     left join mytable c3 on (c1.id=c3.id and c3.lang='FR') 
    where 
     c1.lang='EN' 

    UNION ALL 

    select 
     c1.id,c1.lang,c1.string, 
     c2.id,c2.lang,c2.string, 
     c3.id,c3.lang,c3.string 
    from 
     mytable c2 left join mytable c1 on (c2.id=c1.id and c1.lang='EN') 
     left join mytable c3 on (c2.id=c3.id and c3.lang='FR') 
    where 
     c2.lang='DE' 

    UNION ALL 
    select 
     c1.id,c1.lang,c1.string, 
     c2.id,c2.lang,c2.string, 
     c3.id,c3.lang,c3.string 
    from 
     mytable c3 left join mytable c1 on (c3.id=c1.id and c1.lang='EN') 
     left join mytable c2 on (c3.id=c2.id and c2.lang='DE') 
    where 
     c3.lang='FR' 
+0

ありがとうございます、私のデータはMySQL上です。 – andrixnet

+0

次に、完全な外部結合をシミュレートするために、共用体または共用体allを使用する必要があります。 – lobo

+0

'UNION'であり、' UNION ALL'ではそうではありませんでした。ありがとうございました! – andrixnet

関連する問題