Question

J'ai une table avec du texte dans diverses langues. C'est défini comme ceci:

Id|Language|Text

EXAMPLE DATA

0, ENU, a
0, DAN, b
1, ENU, c
2, ENU, d
2, DAN, e
3, ESP, f
3, ENU, g

La langue et l'identification forment la clé.

Maintenant, je veux extraire tous les textes dans un langauge (disons l'anglais) et avoir le texte de coorospond dans une autre langue (disons danois) montré dans la colonne à côté. Le résultat devrait donc être:

0, a, b
1, c, 
2, d, e
3, g

Je sais que je peux faire une jointure comme ceci:

SELECT t1.Id, t1.Text AS "ENU", t2.Text AS "DAN" table as t1 
JOIN table as t2 ON (t1.Id= t2.Id) 
WHERE t1.Langauge = "ENU" AND t2.Language = "DAN";

Mais cela n'inclut pas les lignes manquantes (c'est-à-dire ID de ligne = 1 et id = 3). Comment faire cela?

* METTRE À JOUR ****J'ai une suggestion d'utiliser la jointure de gauche mais je ne peux pas le faire fonctionner. Peut-être parce que ma disposition de table est un peu différente de celle de la question simplifiée ci-dessus. Ma table est définie comme ceci:

Langue | MPageId | MfieldId | Mparagraph | MText

Où la langue, le mpageid, le mfieldid, le mparagraph forme la clé

J'ai essayé ceci:

Sélectionnez t1.mpageid, t1.mfieldid, t1.mpparAPHID, t1.mtext, t2.mtext de main comme t1 gauche joing main as t2 on (t1.mpageid = t2.mpageid et t1.mfield = t2 = t2.mpparagraphid) où t1.mlanguage = 'enU' et t2.manguage = 'Dan'

Était-ce utile?

La solution

SELECT t1.Id, t1.Text AS "ENU", t2.Text AS "DAN" FROM table as t1 
LEFT JOIN table as t2 ON (t1.Id= t2.Id AND t2.Language = "DAN")
WHERE t1.Langauge = "ENU"

Autres conseils

Vous avez besoin de la jointure de gauche ... mais la "et" clause pour "Dan" ish serait appliquée à la jointure de gauche, et non dans la clause Where ... la clause Where implique une jointure intérieure

SELECT 
      t1.Id, 
      t1.Text AS "ENU", 
      t2.Text AS "DAN" 
   from
      YourTable t1
         LEFT JOIN YourTable t2 
            ON t1.Id= t2.Id
           AND t2.Language = "DAN"
   where
      t1.Langauge = "ENU"

Vous voulez une jointure à gauche: http://www.tizag.com/mysqltutorial/mysqlleftjoin.php

select Id,
MAX(case when LanguageS='ENU' then Text  else null end  ) as A,
MAX( case when LanguageS<>'ENU' then Text  else null end ) as B
from LAN
GROUP BY 1

Id      A           B
0       a           b
1       c           ?
2       d           e
3       g           f
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top