Mysql SQL:从基于2个字段的选择中删除重复值
我有一个简单的表(省略主id字段): 我需要一个SQL,它可以选择在('default','english')中获得语言的每个值,但是如果相同的值同时获得default和english,那么SQL应该放弃“defaul”记录,只返回英语记录 示例:Mysql SQL:从基于2个字段的选择中删除重复值,mysql,Mysql,我有一个简单的表(省略主id字段): 我需要一个SQL,它可以选择在('default','english')中获得语言的每个值,但是如果相同的值同时获得default和english,那么SQL应该放弃“defaul”记录,只返回英语记录 示例:SELECT*FROM tbl,其中externID=10,语言为('default','english'),以及“如果有与default值相同的记录,则首选英语” 选择结果: 1 - english - 10 2 - english - 10 3 -
SELECT*FROM tbl,其中externID=10,语言为('default','english'),以及“如果有与default值相同的记录,则首选英语”
选择结果:
1 - english - 10
2 - english - 10
3 - default - 10
有什么办法吗?
谢谢
这就像是按照价值观进行分组,但更倾向于使用英语
ps.“english”是我需要的一个例子,我可以在vary之间选择特定的语言,对于这个特定的问题
max(language)
应该有效,因为d小于e
编辑(不会中断的解决方案):
添加max(当“默认”时使用大小写语言,然后使用0或1结束)
编辑2(更好):
添加max(当'english'时为case language,然后为1 else 0 end)
这样,如果在()中的部分中添加更多语言,您甚至不会得到复杂的值
第2条编辑:
正如我所承诺的,在这里,我以一种全新的周一早晨思维,为您的需求找到了正确的问题:-)
试一试
说明:
而且他说,语言可能会有所不同,例如,中文会与max决裂。嗯,它不起作用了……:(SELECT*,max(当“en”时为case lang,然后为1 else 0 end)从mlink中选择portalid=10 GROUP BY value
它总是返回lang=default的记录:(等一下,我会在我的数据库中建立一个可降级的文件。这个问题很难解决,是吗?如果你需要解决方案,它就在这里:你编辑了你的文章吗?不确定,但在我写第一个答案时,ps.不在那里?“”@dksan,你可以看到,我从未编辑过文章,它总是在那里:)是的,我也看到了^^^而且似乎没有完成正确的查询。我周末休假。也许明天或周一我会有一些新想法。好吧…太糟糕了,我现在无法撤消我对你答案的+1 XD。无论如何,我是用php atm做的,但在你的示例中,这是一个过火的问题,如果“首选语言”出现,应该返回什么是中文吗?值1应该给出默认值还是英文?
1 - english - 10
2 - english - 10
3 - default - 10
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;