でクエリを結合します。左は、私は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 .......
あなたは、あなたが説明したものと異なる何かをしているにちがいありません。私はちょうどあなたのセットアップを複製し、クエリは翻訳のための 'NULL'を持つ行を含め、必要なものを正確に生成しました。 –
あなたは正しいです。しかし、私が探しているのは、最初のフィールドの価値も持っていることです。 UmeåAirport; NULL; "fr" UmeåAirport; NULL; "いいえ。このフィールドがない場合は、すべてのテーブルに" fr "という空のフィールドがたくさん表示されます。 – ppardoz
その場合、スキーマを正規化する必要があります。名前(最初の列)を新しいテーブルに抽出してIDを与えます。次に、言語とこの新しいテーブルのクロス積をクエリして、すべての可能なエントリを作成します。翻訳テーブルに残しておくと、必要なものが手に入ります。 –