Ceci est une question assez délicate, mais je vais faire de mon mieux pour préciser:Récupérer des colonnes de la même table avec les mêmes clés étrangères mais des valeurs différentes
J'ai une table countrynames
avec 3 colonnes: iso , lang, nom. La principale orthographe pour ces derniers est l'anglais, par exemple:
+-----+------+-----------------------------+
| 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 est la clé étrangère qui fait référence à l'ISO-3166 codant pour les pays. J'ai inséré un certain nombre de pays avec l'orthographe anglaise, mais aussi dans d'autres langues UNIQUEMENT lorsque l'orthographe est différente de l'anglais, afin d'économiser de l'espace dans la base de données (par exemple "Germany" en allemand est "Deutschland", donc l'iso pour 'DE' apparaît deux fois dans la table, avec 2 noms différents). Ce dont j'ai besoin est de sélectionner tous les pays dans une langue spécifique (comme l'allemand, ou l'espagnol), puis tous les pays avec des noms anglais de la même colonne. S'il n'y a pas de nom correspondant dans la langue étrangère, alors le nom anglais doit remplir le champ vide, de sorte que je reçois un mélange d'anglais + langue étrangère. Le mélange doit être égale à la somme des pays ayant une orthographe anglais, comme ceci (nulls sont où les noms anglais doivent remplir les noms espagnols disparus, comme le Congo, le Chili, la Chine, la Colombie):
'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
C'est ce que je jusqu'à présent:
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;
merci beaucoup! Les solutions sont parfois si faciles à trouver, que nous perdons la trace des choses à la recherche de moyens compliqués pour atteindre l'objectif :) –