用于获取特定语言行的 SQL 查询(使用默认语言)

Posted

技术标签:

【中文标题】用于获取特定语言行的 SQL 查询(使用默认语言)【英文标题】:SQL query for fetching rows in certain language (with default lang) 【发布时间】: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”行。 【参考方案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 - 正确,我需要将此功能添加到我的个人工具箱中... :) 谢谢!

以上是关于用于获取特定语言行的 SQL 查询(使用默认语言)的主要内容,如果未能解决你的问题,请参考以下文章

C 语言行指针与列指针详解

SQL结构化查询语——之DDL语言

SQL语句查询特定时间段的数据怎么写

SQL结构化查询语——之DQL语言

获取特定子记录的 SQL 查询

怎么查询SQL语数据条数?