我有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
此代码不会输出具有空值的缺失翻译。
答案 0 :(得分:2)
您将需要在子查询中创建translations
和translation_languages
的所有组合。然后,对翻译ID和语言进行LEFT JOIN
至translation_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