2011-04-17 64 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