gpt4 book ai didi

当现有连接结果为空时 MySQL 新连接

转载 作者:行者123 更新时间:2023-11-29 06:32:06 26 4
gpt4 key购买 nike

我有两个表:catcat_name

:

id
--
1
2

猫名:

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'

这是可行的,但是当猫的名字没有针对给定语言环境的翻译时(例如,在上面的示例中,如果我们想要获取猫 2fr 名称) ),name 值如预期为 null

我不明白的是,在给定后备语言环境(例如 en)的情况下,如何检查 JOIN 的结果是否为 null,如果是这样,则获取后备语言环境的名称。 IE。在上面的示例中,即使设置的区域设置为 fr,也返回猫名 Jane

最佳答案

只需在 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

Demo on dbfiddle

关于当现有连接结果为空时 MySQL 新连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55686750/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com