我有两个表:cat
和cat_name
。
cat
:
id
--
1
2
cat_name
:
id | cat_id | locale | name
---------------------------
1 | 1 | en | John
2 | 1 | fr | Jean
3 | 2 | en | Jane
获取给定语言环境的猫及其名称的列表的我的SQL是:
SELECT `cat`.`id` AS `id`, `cat_name`.`name` AS `name` FROM `cat`
LEFT JOIN `cat_name` ON `cat`.`id` = `cat_name`.`cat_id` AND `cat_name`.`locale` = 'fr'
这有效,但是当猫的名字没有给定语言环境的翻译时(例如,在上面的示例中,如果我们要为猫fr
获得2
的名字),{{1 }}值是name
。
在给定的备用语言环境(例如null
)下,我不知道如何检查en
的结果是否为JOIN
,如果是这样,然后获取后备语言环境的null
。即在上面的示例中,即使设置的语言环境为name
,也要返回猫名Jane
。
答案 0 :(得分:2)
只需在JOIN
中添加后备语言,然后在给定语言没有值的情况下,使用COALESCE
选择该值即可。
SELECT `cat`.`id` AS `id`, COALESCE(`c2`.`name`, `c1`.`name`) AS `name`
FROM `cat`
JOIN `cat_name` c1 ON `cat`.`id` = `c1`.`cat_id` AND `c1`.`locale` = 'en'
LEFT JOIN `cat_name` c2 ON `cat`.`id` = `c2`.`cat_id` AND `c2`.`locale` = 'fr'
输出:
id name
1 Jean
2 Jane