2010-07-26 46 views
1

我想请从下面的表中的两个不同的号码ID1和ID2:2列不同?

tb_table1( BIGINT ID1 BIGINT ID2 BIGINT用户ID)

,如果我做

select distinct id1, id2 from tb_table1 

我例如,会得到两行(111,222)和(222,111)。

我只想要这些行中的一个,因为我不关心返回结果的列,id1或id2。基本上,我需要不同的对,其顺序无关紧要。

想法?提前致谢。

+0

@ RK-您有以下所有可能的解决方案,比较所有查询的性能 – hrishi 2010-07-26 16:12:48

回答

3

如果我没有指出这表明你的表格没有像应该标准化那么简单 - 当用户获得第三个ID时你会做什么?但不管怎么说。

使用的事实,UNION(相对于UNION ALL)会自动删除重复的,你可以做

SELECT id1, id2 FROM tb_table1 WHERE id1 < id2 
UNION 
SELECT id2, id1 FROM tb_table1 WHERE NOT id1 < id2 
+2

其中id1为空或id2为空的行将不包含在结果中。取决于'id1'和'id2'的要求和定义,这可能或可能不是问题。 – 2010-07-26 16:05:43

0

我认为这是一个更好的解决方案,但是这应该工作:

select t1.id1, t2.id2 
from tb_table1 t1 
inner join tb_table1 t2 on t1.id1 = t2.id2 and t1.id2 = t2.id1 
where t2.id1 is null 
0

将这样的事情是任何帮助...

SELECT DISTINCT CASE WHEN id1 < id2 THEN id1 ELSE id2, 
       CASE WHEN id1 > id2 THEN id1 ELSE id2 
    FROM tb_table1; 

(虽然看到AakashM的解决方案,但我认为我更喜欢它)。