これは非常にデリケートな質問ですが、明確にするために最善を尽くします。
countrynames
iso、lang、nameの3つの列を持つテーブルがあります。これらの主なスペルは英語です。例:
+-----+------+-----------------------------+
| iso | lang | name |
+-----+------+-----------------------------+
| CA | EN | Canada |
| CC | EN | Cocos (Keeling) Islands |
| CF | EN | Central African Republic |
| CG | EN | Congo |
| CI | EN | Cote d'ivoire (Ivory Coast) |
| CK | EN | Cook Islands |
| CL | EN | Chile |
| CM | EN | Cameroon |
| CN | EN | China |
| CO | EN | Colombia |
+-----+------+-----------------------------+
isoは、国のiso-3166コーディングを参照する外部キーです。
データベースのスペースを節約するために、英語のスペルがある国をいくつか挿入しましたが、他の言語でも、スペルが英語と異なる場合にのみ挿入しました(たとえば、ドイツ語の「ドイツ」は「ドイツ」なので、 'DE'は、2つの異なる名前でテーブルに2回表示されます)。
私が必要としているのは、特定の言語(ドイツ語、スペイン語など)ですべての国を選択してから、同じ列から英語の名前を持つすべての国を選択することです。外国語に対応する名前がない場合は、英語の名前を空のフィールドに入力して、英語と外国語が混在するようにする必要があります。混合物は、次のように英語のスペルがある国の合計と等しくなければなりません(nullは、英語の名前が、コンゴ、チリ、中国、コロンビアなど、欠落しているスペイン語の名前を埋める場所です)。
'CA', 'ES', 'Canadá'
'CC', 'ES', 'Islas Cocos'
'CD', 'ES', 'República Democrática del Congo'
'CF', 'ES', 'República Centroafricana'
NULL, NULL, NULL
'CH', 'ES', 'Suiza'
'CI', 'ES', 'Costa del Marfil'
'CK', 'ES', 'Islas Cook'
NULL, NULL, NULL
'CM', 'ES', 'Camerún'
NULL, NULL, NULL
NULL, NULL, NULL
NULL, NULL, NULL
NULL, NULL, NULL
これは私がこれまで使用したものです:
select result2.iso, result2.lang, result2.name from (select result1.* from (select t1.*
from (
select iso, lang, name from countrynames where lang = 'es') t1
right join
(select iso, lang, name from countrynames where lang = 'en') t2
on t1.iso = t2.iso) result1) result2;