我有下表
+-------------------+----------------------+
| 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来过滤结果,但我假设我应该使用其他东西或只是在服务器端过滤结果数组。
答案 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
快。
此外,结果集中的所有语言对也都在原始数据中。