mysql - GROUP BY时组内操作

标签 mysql sql sqlite

items 表的键由 (lang, id) 组成。有些项目有不同语言的翻译名称。我想创建这样一个查询,它将以给定语言从数据库中返回所有项目,如果项目没有翻译则返回未翻译的值。

假设我想获得所有用保加利亚语编写的项目。这就是我被困的地方:

SELECT lang, id, name
FROM items
WHERE lang = "bg" OR lang = "en"
GROUP BY id

当有一个项目,比如说,(1, "en") 和一个项目(1, “背景音乐”)。 ID是一样的。那么 MySQL 或 SQLite 如何确定返回哪个结果呢?有什么办法可以告诉它我宁愿返回 (1, "bg") 如果它存在但如果不存在则 ( 1, "en") 会让我满意吗?

附言 为了进一步说明我想要什么,让我们假设数据库包含以下具有模式(id、lang、名称)的条目:

(1“en”“abc”)

(2“en”“cde”)

(3“en”“def”)

(1“bg”“абв”)

(3“bg”“жзи”)

在执行所需的保加利亚语查询后,我应该得到:

(1“bg”“абв”)

(2“en”“cde”)

(3“bg”“жзи”)

最佳答案

如果“untranslated”表示“英语”或换句话说,基本语言是英语,您可以LEFT 将表与其自身连接并使用COALESCE() 函数摆脱 NULL

SELECT COALESCE(bg.lang, en.lang) AS lang
     , en.id                      AS id
     , COALESCE(bg.name, en.name) AS name
FROM items en
  LEFT JOIN items bg
    ON  bg.id = en.id
    AND bg.lang = 'bg'
WHERE en.lang = 'en'

关于mysql - GROUP BY时组内操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8290033/

相关文章:

objective-c - sqlite3_open 总是返回 SQLITE_OK?

mysql - Magento:如何调试 "admin"?

sql - 返回第一个字符为非字母的行

asp.net - SQLite更新查询参数不接受系统字符串值

mysql - phpmyadmin导入错误

python - 不关闭游标会导致内存泄漏吗?

sql - 有没有办法确定 SQL Server 存储过程返回记录集

mysql - 如何将列值分配给 mySQL 脚本中的变量?

mysql - 高级更新 - 通过从另一表获取数据来更新一个表中的列

Mysql group by 包含空格作为相同的值