2011-04-17 37 views
2

我有城市的表:SQL查询在某些语言获取行(使用默认郎)

  • city_id
  • 语言代码

采样数据(city_id,名称,languagecode):

  • 1,LondonName,en
  • 1,LondonName,德
  • 1,LondonName123,JP
  • 2,巴塞罗那,EN
  • 2,Barcelona123,德,
  • 3,马德里,EN

我怎样才能以特定语言(即, de),但如果那里没有该语言的城市翻译,我想为该行取默认语言(即英语)的翻译。

所以,导致了语言代码 “德” 应该是这样的:

  • 1,LondonName,德
  • 2,Barcelona123,德
  • 3,马德里,EN

数据库:MySQL

+0

可能是这样可以工作从语言代码='de'OR(languagecode!='de'AND languagecode ='en')“的城市中选择*。 – Ravin 2011-04-17 16:26:11

+0

@Ravin:你的尝试不会显示OP要求的内容。它将显示“de”和“en”行。 – 2011-04-17 18:45:32

回答

2

我通常更喜欢使用JOIN而不是内部选择,因此这里有第二个选项:

SELECT c.city_id, 
IF(c2.name IS NULL,c.name,c2.name) 'name', 
IF(c2.languagecode IS NULL, c.languagecode, c2.languagecode) 'languagecode' 
FROM cities c 
LEFT JOIN cities c2 ON c.city_id = c2.city_id AND c2.languagecode = 'de' 
WHERE c.languagecode = 'en' 
GROUP BY c.city_id 
+0

+1 @Galz:很好。你可以使用'COALESCE()'而不是'IF'和'IS NULL'。 – 2011-04-17 18:47:38

+0

@ypercube - 正确,我需要将此函数添加到我的个人工具箱中... :)谢谢! – Galz 2011-04-17 19:52:39