我有这个简单的表(省略主要id字段):
value - language - externID
1 default 10
1 english 10
2 english 10
3 default 10
我需要一个SQL来选择每个得到语言IN的值('default','english')但是在相同的值同时获得默认值和英语的情况下,sql应该丢弃“defaul”记录并仅返回英语之一。
示例:SELECT * FROM tbl WHERE externID = 10 AND language IN ('default','english') AND "prefer english if there is a record with same value with default"
SELECT的结果:
1 - english - 10
2 - english - 10
3 - default - 10
有什么办法吗? 感谢
这就像做一个GROUP BY值但是偏爱英语。
PS。 “英语”是我需要的一个例子我可以选择不同的特定语言
答案 0 :(得分:2)
对于这个特定问题max(language)
应该有效,因为d小于e。
添加max(case language when 'default' then 0 else 1 end)
Edit2(更好):
添加max(case language when 'english' then 1 else 0 end)
,这样,如果您向in()
部分添加更多语言,您甚至无法获得重复值
编辑Nr。 2:
正如我所承诺的,在这里,我带着一个全新的mondaymorning头脑,并根据您的需求得到正确的查询: - )
尝试
SELECT value,
CASE group_concat(language)
WHEN 'default' then 'default'
ELSE LTRIM(REPLACE(group_concat(language SEPARATOR ' '),'default',''))
END as language,
externID
FROM demo
WHERE externID = 10
AND language in ('default','english')
GROUP BY value;
说明: GROUP_CONCAT和LTRIM