SQL:根据2个字段从select中删除重复值

时间:2011-02-25 13:52:28

标签: mysql

我有这个简单的表(省略主要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。 “英语”是我需要的一个例子我可以选择不同的特定语言

1 个答案:

答案 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_CONCATLTRIM