在MySQL中的两个列上过滤不同的

时间:2017-04-15 21:37:40

标签: mysql sql

我有下表

+-------------------+----------------------+
| original_language | translation_language |
+-------------------+----------------------+
| en                | pl                   |
| en                | ru                   |
| pl                | en                   |
| pl                | ru                   |
| ru                | pl                   |
+-------------------+----------------------+

目前有一些重复项,例如 en - pl pl - en ,但我想删除它们。

所以结果看起来应该是

+----+----+
| en | pl |
| en | ru |
| pl | ru |
+----+----+

我使用group by来过滤结果,但我假设我应该使用其他东西或只是在服务器端过滤结果数组。

2 个答案:

答案 0 :(得分:1)

这可能对您有用:

SELECT DISTINCT
    least(original_language,translation_language) as Col1,
    greatest(original_language,translation_language) as Col2
FROM MyTable

答案 1 :(得分:0)

我建议这样做:

select original_language, translation_language
from t
where original_language <= translation_language
union all
select original_language, translation_language
from t
where original_language > translation_language and
      not exists (select 1
                  from t t2
                  where t2.original_language = t.translation_language and
                        t2.translation_language = t.original_language 
                 );

使用t(original_language, translation_language)上的索引,这基本上是对表的两次扫描,以及索引查找(价格便宜)。在大多数情况下,这应该比select distinct快。

此外,结果集中的所有语言对也都在原始数据中。