MySQL加入null?

时间:2012-01-23 08:10:39

标签: mysql sql

我有两张桌子:

产品:

id | sku
0    P323
1    K534

翻译:

product_id | lang | name
0            en     Some product
0            sl     Nek izdelek
1            en     Some other product

现在,我需要显示斯洛文尼亚语(sl)翻译,但如果不存在,则应显示英语翻译。

我正在寻找一种获取产品的方法,其结果如下:

id | sku  | name
0    P323   Nek izdelek
1    K534   Some other product

使用MySQL可以实现单个查询吗?

注意:转换表中的条目可能不存在或存在,但所有值(外键除外)都可以为空。

按要求编辑: 我需要有一个选项,让特权后端用户创建尽可能多的文本字段,因为电子商店需要它们用于产品展示(例如简短说明,包装内容,保修信息......)。因此,我宁愿不将列名硬编码到SQL查询中,因为这会降低可移植性 我需要选择所有翻译字段而不指定列名,如“translation。*” 如果找不到实际的解决方案,我将使用维护自定义列的记录,这些列在构建查询时(在执行查询之前)添加。

1 个答案:

答案 0 :(得分:5)

如果两个翻译都缺失,则名称显示为NULL

SELECT p.id, sku, IFNULL(tr.name,en.name) as name
FROM product p
LEFT JOIN translation en ON p.id = en.product_id and en.lang = 'en'
LEFT JOIN translation tr ON p.id = tr.product_id and tr.lang = 'sl'

另见IFNULL

的文档

OR与COALESCE以获得更好的性能

SELECT p.id, sku, COALESCE(tr.name,en.name) as name
FROM product p
LEFT JOIN translation en ON p.id = en.product_id and en.lang = 'en'
LEFT JOIN translation tr ON p.id = tr.product_id and tr.lang = 'sl'