我有这3张桌子: - 角色表 - 语言表 - 角色翻译表
我想用翻译请求所有角色,如果没有翻译,则显示'翻译'。
我尝试了这个没有成功:
select
r.id_role,
t.id_langue,
case when t.id_langue is null then 'to translate' else t.libelle end
from role r
left join trad_role t on r.id_role = t.id_role
left join langue l on t.id_langue = l.id_langue
order by t.id_role;
在此示例中,ADMIN角色未翻译为英语。所以我希望能够翻译出来。对于英语。我没有。
结果是:
我希望也有这条线: ADMIN / en /翻译
我的要求有什么问题?谢谢你的帮助。
的Dom
编辑:我也尝试过这样做,没有成功:
select * from
(select t.id_role, t.id_langue, t.libelle
from role r
join trad_role t on r.id_role = t.id_role) T1
left join langue l on l.id_langue = T1.id_langue;
答案 0 :(得分:1)
尝试:
select
r.id_role,
l.id_langue,
case when t.id_langue is null then 'to translate' else t.libelle_langue end
from role r
cross join langue l
left join trad_role t on r.id_role = t.id_role and t.id_langue = l.id_langue
;
演示:http://sqlfiddle.com/#!9/30e71d/14
| id_role | id_langue | case when t.else |
|---------|-----------|--------------------------------|
| ADMIN | fr | Administrateur |
| ADMIN | it | Administatore |
| ADMIN | en | to translate |
答案 1 :(得分:0)
你可以尝试一下:
select
r.id_role,
t.id_langue,
IF(l.id_langue is null,'to translate',t.libelle) as 'status'
from role r
left join trad_role t
on r.id_role = t.id_role
left join langue l
on t.id_langue = l.id_langue
order by t.id_role;
基本上,我没有测试未连接的表中的列(因此不会为null),而是测试左连接表中的列。