我有一个这样的表:(translations_tb)
NID LANGUAGE (translations_tb)
1 fr
1 en
2 fr
2 en
3 fr
3 en
4 en
5 en
我需要一个查询,它将获得如下结果:
这是上面示例中的工作方式。
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语言。
答案 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;