【问题标题】:SQL query for fetching rows in certain language (with default lang)用于获取特定语言行的 SQL 查询(使用默认语言)
【发布时间】:2011-04-17 16:11:04
【问题描述】:

我有一张带有城市的表格:

  • city_id
  • 姓名
  • 语言代码

样本数据(city_id、名称、语言代码):

  • 1, LondonName, en
  • 1, LondonName, de
  • 1, LondonName123, jp
  • 2, 巴塞罗那, zh
  • 2, Barcelona123, de,
  • 3, 马德里, zh

如何获取某种语言(即 de)的所有城市,但如果没有该语言的城市翻译,我想获取该行的默认语言(即英语)的翻译。

所以,语言代码“de”的结果应该是这样的:

  • 1, LondonName, de
  • 2,巴塞罗那123,德
  • 3, 马德里, zh

数据库:MySQL

【问题讨论】:

  • 也许这可以工作 从 languagecode='de' OR (languagecode != 'de' AND languagecode='en') 的城市中选择 *。
  • @Ravin:您的尝试不会显示 OP 的要求。它将显示“de”和“en”行。

标签: mysql sql


【解决方案1】:

我通常更喜欢使用 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

【讨论】:

  • +1 @Galz:很好。您可以使用COALESCE() 代替IFIS NULL
  • @ypercube - 正确,我需要将此功能添加到我的个人工具箱中... :) 谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多