我正在根据this回答翻译现有MySQL表。在这种情况下,我正在处理menu_items,我的表结构现在看起来如下:
我现在正在寻找一种以这种方式加入这些表的方法,我可以在搜索另一种语言时使用一种语言作为后备。
标准查询将是这样的:
SELECT
*
FROM
menu_items mi
INNER JOIN menu_item_translations mit
ON mit.menu_item_id = mi.id
WHERE
mit.language = 'en';
但是如果没有找到英文菜单项,我希望'nl'成为后备。我不太热衷于存储过程,但如果必须,我可以使用它们。
有没有办法在这个查询中实现回退,没有太多的性能损失或丑陋?
答案 0 :(得分:0)
在发布此问题之后意识到答案很简单;
SELECT
mi.*,
COALESCE(mit.label, mit_fb.label) AS label
FROM
menu_items mi
LEFT JOIN menu_item_translations mit
ON mit.menu_item_id = mi.id
AND mit.language = 'en'
LEFT JOIN menu_item_translations mit_fb
ON mit_fb.menu_item_id = mi.id
AND mit_fb.language = 'nl';
这正是我想要的。