通过始终包含所有语言从表中获取翻译,即使没有翻译

时间:2019-07-02 09:00:50

标签: mysql

我有3个MySQL表:

  • 翻译: - ID -名称

  • translation_details: - ID -translation_id -翻译

  • 语言: -language_code

翻译表中有唯一的翻译名称,例如:welcome.title,登录名,注册名等

对于这种独特的字符串,在translation_details表中有针对它们的本地化翻译,但某些语言可能会丢失。

在languages表中,有一些我想要翻译的语言。

我想确保即使翻译结果中没有与之匹配的内容,每个“翻译”也都将与其翻译数据一起输出。

例如,

Languages: en, de, it
Translations: test1
Translation details: test1 in English (en), test1 in German (de)

因此,缺少意大利语翻译。

如何编写一个查询,该查询还会丢失具有空值的翻译。

我尝试使用右连接,但是没有用。

SELECT
    * 
FROM
    translations
    JOIN translation_details AS td ON td.translation_id = translations.id
    RIGHT JOIN translation_languages AS lang ON lang.language_code = td.language_code 

此代码不会输出具有空值的缺失翻译。

1 个答案:

答案 0 :(得分:2)

您将需要在子查询中创建translationstranslation_languages的所有组合。然后,对翻译ID和语言进行LEFT JOINtranslation_details

SELECT
    * 
FROM
(
  SELECT * 
  FROM translations AS t
  CROSS JOIN translation_languages AS tl
) AS dt 
LEFT JOIN translation_details AS td ON td.translation_id = dt.id 
                                       AND td.language_code = dt.language_code