7

假设我的表中有以下行

表格行

ID
63
64
65
66
67
68

如果我运行以下查询,我会得到 30 行。

SELECT r1.id, r2,id 
  FROM rows AS r1 
    CROSS JOIN rows AS r2 
  WHERE r1.id!=r2.id

结果:

63 64
65 64
66 64
67 64
68 64
64 63
65 63
66 63
67 63
68 63
63 65
64 65
66 65
67 65
68 65
63 66
64 66
65 66
67 66
68 66
63 67
64 67
65 67
66 67
68 67
63 68
64 68
65 68
66 68
67 68

我将如何获得以下结果而不是上述结果?

63,64  
63,65   
63,66
63,67
63,68

64,65
64,66
64,67
64,68

65,66
65,67
65,68

66,67
66,68

67,68

如您所见,例如,我不想同时获得 63,64 和 64,63。

4

2 回答 2

17

很简单,只加入高于当前值的值。

select r1.id, r2,id 
from rows r1 
cross join rows r2 
where r1.id < r2.id
于 2011-03-21T18:14:19.843 回答
2

只需添加一个条件。左侧总是比右侧小。这将消除所有不需要的情况。

select r1.id, r2,id from rows as r1 cross join rows as r2 where r1.id!=r2.id and r1.id <r2.id
于 2011-03-21T18:16:08.003 回答