我有3代表为初级讲座:如何查询表,以获取其链路记录中没有任何记录,并有过滤记录,以及
translation_token ----------------- id token default_value -- ------ ------------- 1 token_1 Token 1 2 token_2 Token 2 3 token_3 Token 3 translation_token_value ----------------------- id token_id language_id value -- -------- ----------- ----- 1 1 1 Token 1 english 2 1 2 Token 1 dutch 3 2 1 Token 2 english application_module ------------------ id name -- ---- 1 project 2 location LI_translation_token_application_module --------------------------------------- id token_id application_module_id -- -------- --------------------- 1 1 1 2 2 2
我已经translation_token表,如果有翻译适用于特定的语言,然后它条目将存在于translation_token_value表中,否则default_translation将被取回为令牌并且不为null。
此外,这些令牌既可用于特定模块,也可用于所有模块。如果这些令牌用于模块,那么LI_translation_token_application_module表中将存在链接,否则不会有任何条目。
获取记录时,我总是有模块和language_id用于过滤器,以便我可以获取特定模块和语言的翻译以及一般翻译,即适用于所有模块的令牌。
到目前为止,我尝试了下面的查询,但没有得到成功。我没有获得在translation_token_value中没有翻译的标记,因此对于此标记default_translation将是可见的。
SELECT translation_token.token, ttv.value,
CASE WHEN ttv.value = NULL THEN translation_token.default_translation
ELSE ttv.value
END
FROM translation_token
LEFT OUTER JOIN translation_token_value AS ttv ON ttv.token_id = translation_token.id
LEFT OUTER JOIN LI_translation_token_application_module AS token_app_mod ON token_app_mod.token_id = ttv.token_id
LEFT JOIN application_module
ON application_module.id = token_app_mod.application_module_id
WHERE (application_module.name IN('project') OR application_module.name IS NULL)
AND (language_id = 2 OR language_id is null)
你也需要改变'WHEN ttv.value = NULL'到'WHEN ttv.value IS NULL' – Alex
心中已经编辑查找我的错误查询感谢@Alex –
@EidMorsy感谢。但是这只是解决了在LI表中不存在令牌的问题。如果任何语言的translation_token_value表中没有令牌记录,则此查询仍然不起作用。 – Kammy