2017-04-15 56 views
0

我有如下表过滤器上的两列不同的MySQL中

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

现在有喜欢的恩有些重复 - PLPL - 恩但我想删除它们。

所以结果应该

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

我用组通过筛选的结果,但我想我应该用其他的东西或者只是过滤服务器端的结果数组。

+0

请编辑问题以包含正在使用的SQL。 – lit

回答

1

这可能会为你工作:

SELECT DISTINCT 
    least(original_language,translation_language) as Col1, 
    greatest(original_language,translation_language) as Col2 
FROM MyTable 
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更快。

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

+0

联合中的第二个查询不应该使用'>'(或者如果您愿意,可以选择第一个查询)? –

+0

@SteveLovell。 。 。谢谢。 –