2012-11-09 113 views
0

由于很久以前我研究数据库和查询,我遇到了一些小麻烦。MySQL,从不同的表中选择... IF

例如,我将为cd:s提供两张表,其中一张带有数据,另一张带有替代翻译。 在CD-表我有原来的语言,它看起来像这样

Table for CDs (cds): 
id | name | language 
----------------------- 
1 | aaa | en 
2 | bbb | en 
3 | ccc | fi 

Table for languages (languages): 
cd_id | language | name 
----------------------- 
1  | fi  | AAA 
1  | de  | AAACHTUNG 
3  | en  | CCC 

现在,我想所有这些CD:■在例如德国,如果没有译言我希望它在原有的语言......

编辑: 德国DE =

由于只有一个德文译本(CD#1上)我想CD 2 & 3 thier原来的名字..英语和芬兰语中这种情况...

我该怎么做?

编辑2: 在这种情况下,当我问“德”我会得到:

AAACHTUNG 
bbb 
ccc 

如果我问“恩”我会得到

aaa 
bbb 
CCC 

等。 ..

+0

如果以下是德语?如果有'ID = 1'等多种语言,会发生什么? –

+0

是的,我编辑。德语='德':) ,如果有很多翻译,我希望它是请求或原件... – gubbfett

+0

你也可以添加你想要的结果? –

回答

4

这应该做的伎俩(SQL Fiddle):

select coalesce(l.name, c.name) 
from cds c 
left join languages l on l.cd_id = c.id 
         and l.language = 'de'; 
+0

嗯,是的......它在小提琴中起到了完美的作用,但是我没有得到翻译的版本......只有原版......并且无法弄清楚为什么......但至少感觉就像我一样现在真的很接近...... :) – gubbfett

+0

“只有原始”是什么意思?在sqlfiddle中有你的第一个预期结果。 –

+0

“原始”= cds表。在我的项目上...但是,是的,它在小提琴中工作,并且是合体的。 – gubbfett

0
select cds.id, IFNULL(languages.name, cds.name) as name 
from cds 
left join languages on cds.id = languages.cd_id and languages.language = 'de'