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/