从此表中获取特定结果

时间:2018-08-18 19:51:20

标签: mysql sql

我有一个这样的表:(translations_tb)

NID LANGUAGE (translations_tb)
 1     fr
 1     en
 2     fr
 2     en
 3     fr
 3     en
 4     en
 5     en

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

  1. 所有具有FR语言的NID
  2. 所有带有EN语言的NID都是== FR NID
  3. 排序方式:首先是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

这首先使它按照我的动态语言进行排序,但是我知道我不应该使用IN('fr','en'),但无法弄清楚我该怎么做才能排除重复的NID。 ZH语言。

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:1)

您可以GROUP BY nid并获取max(language),如果'fr'的两种语言都存在,则返回nid,因为'fr' > 'en'。出于相同的原因,您可以按降序排列,使结果中的'fr'优先出现。

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