Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/87.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 从该表中获取具体结果_Mysql_Sql - Fatal编程技术网

Mysql 从该表中获取具体结果

Mysql 从该表中获取具体结果,mysql,sql,Mysql,Sql,我有一张这样的桌子:(翻译) 我需要一个查询,它将得到如下结果: 所有NID都使用FR语言 所有使用英语的NID都是!=尼德神父 排序方式:先是FR语言,后是EN语言(可以是DE、RU、RO等语言) 对于上面的示例,它应该是这样工作的 NID LANGUAGE 1 fr 2 fr 3 fr 4 en 5 en 我尝试的是: SELECT nid, CASE WHEN language = 'fr' THEN 0 ELSE 1 EN

我有一张这样的桌子:(翻译)

我需要一个查询,它将得到如下结果:

  • 所有NID都使用FR语言
  • 所有使用英语的NID都是!=尼德神父
  • 排序方式:先是FR语言,后是EN语言(可以是DE、RU、RO等语言)
  • 对于上面的示例,它应该是这样工作的

    NID   LANGUAGE
    1       fr
    2       fr
    3       fr
    4       en
    5       en
    
    我尝试的是:

    SELECT nid, CASE WHEN language = 'fr' THEN 0 ELSE 1 END as new_language 
    FROM translations_tb
    WHERE language in ('fr', 'en')
    ORDER BY new_language ASC
    

    这将首先按照我的动态语言对其进行排序,但我知道我不应该在('fr','en')中使用,但我无法确定应该做什么来排除来自en语言的重复NID。

    首先使用language='fr'设置条件,然后使用子查询为'en'添加条件,以排除使用'fr'语言的NID

    select nid, language
    from translations_tb
    where language = 'fr'
       or (language = 'en' and nid not in (select nid 
                                           from translations_tb 
                                           where language = 'fr'))
    

    您可以通过nid对
    进行分组
    并获取
    max(language)
    ,如果该
    nid
    同时存在两种语言,那么它将返回
    'fr'
    ,因为
    'fr'>'en'
    。出于同样的原因,您可以按语言降序,将结果中的
    'fr'
    放在第一位

    SELECT nid,
           max(language) language
           FROM translations_tb
           WHERE language IN ('fr',
                              'en')
           GROUP BY nid
           ORDER BY 2 DESC;
    

    你说的“动态语言”是什么意思?你使用的是哪个版本的MySQL?它不能是de、ru、ro。这是唯一的fr或enBy动态语言,我的意思是,无论语言是什么(de、jp、ua),查询都会按照它进行排序。如果感兴趣的语言是
    'de'
    @Nick:的确如此,那么这个查询将不起作用。您必须将
    max()
    更改为
    min()
    并将
    DESC
    更改为
    ASC
    或什么都不更改(将
    'fr'
    更改为
    'de'
    )。
    SELECT nid,
           max(language) language
           FROM translations_tb
           WHERE language IN ('fr',
                              'en')
           GROUP BY nid
           ORDER BY 2 DESC;