Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql SQL:从基于2个字段的选择中删除重复值_Mysql - Fatal编程技术网

Mysql SQL:从基于2个字段的选择中删除重复值

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 -

我有一个简单的表(省略主id字段):

我需要一个SQL,它可以选择在('default','english')中获得语言的每个值,但是如果相同的值同时获得default和english,那么SQL应该放弃“defaul”记录,只返回英语记录

示例:
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;