2016-07-14 5 views
0

でクエリを結合します。左は、私は2つのテーブルを持っているすべての可能な組み合わせ

isolanguage 
"de" 
"en" 
"es" 
"fi" 
"fr" 
"no" 
"pl" 
"ru" 

そして翻訳私は場所の翻訳を保存する、:私は取得しようとしているものを

Name, translation, isolanguage 
"Umeå Airport";"Flughafen Umeå";"de" 
"Umeå Airport";"Umeå Airport";"en" 
"Umeå Airport";"Aeropuerto de Umeå";"es" 
"Umeå Airport";"Uumajan lentoasema";"fi" 

は、言語テーブル内の各言語の翻訳テーブル内のすべての要素のリストです。

期待される結果は:

"Umeå Airport";"Flughafen Umeå";"de" 
"Umeå Airport";"Umeå Airport";"en" 
"Umeå Airport";"Aeropuerto de Umeå";"es" 
"Umeå Airport";"Uumajan lentoasema";"fi" 
"Umeå Airport";NULL;"fr" 
"Umeå Airport";NULL;"no" 
"Umeå Airport";NULL;"pl" 
"Umeå Airport";NULL;"ru" 

ポイントは、私が翻訳を持つかどうか、すべての言語を必要とするということです。 Uが

SELECT Name, translation, isolanguage 
FROM 
translations 
WHERE 
language.isolanguage=translation.isolanguage AND 
language.isolanguage = 'de' OR 
language.isolanguage = 'fr' OR ....... 
+3

あなたは、あなたが説明したものと異なる何かをしているにちがいありません。私はちょうどあなたのセットアップを複製し、クエリは翻訳のための 'NULL'を持つ行を含め、必要なものを正確に生成しました。 –

+0

あなたは正しいです。しかし、私が探しているのは、最初のフィールドの価値も持っていることです。 UmeåAirport; NULL; "fr" UmeåAirport; NULL; "いいえ。このフィールドがない場合は、すべてのテーブルに" fr "という空のフィールドがたくさん表示されます。 – ppardoz

+1

その場合、スキーマを正規化する必要があります。名前(最初の列)を新しいテーブルに抽出してIDを与えます。次に、言語とこの新しいテーブルのクロス積をクエリして、すべての可能なエントリを作成します。翻訳テーブルに残しておくと、必要なものが手に入ります。 –

答えて

1

することができますを使用することができます

select * from languages a 
left join translations b 
on (a.isolanguage = b.isolanguage) 

"Umeå Airport";"Flughafen Umeå";"de" 
"Umeå Airport";"Umeå Airport";"en" 
"Umeå Airport";"Aeropuerto de Umeå";"es" 
"Umeå Airport";"Uumajan lentoasema";"fi" 
NULL;NULL;"fr" 
NULL;NULL;"no" 
NULL;NULL;"pl" 
NULL;NULL;"ru" 
1

は、私はそれだけで両方のテーブルにある要素を見せて、左がクエリに参加しようとしているが、動作していない(除くNULLS)これを使用してください:

select name, isolanguage, translation 
from (
    select distinct t.name, l.isolanguage 
    from translations t 
    cross join languages l 
    ) t 
left join translations 
using (name, isolanguage) 
order by 1, 2; 

    name  | isolanguage | translation  
--------------+-------------+-------------------- 
Umea Airport | de   | Flughafen Umea 
Umea Airport | en   | Umea Airport 
Umea Airport | es   | Aeropuerto de Umea 
Umea Airport | fi   | Uumajan lentoasema 
Umea Airport | fr   | 
Umea Airport | no   | 
Umea Airport | pl   | 
Umea Airport | ru   | 
(8 rows) 
関連する問題