mysql交叉连接,但没有重复对?

时间:2011-03-21 18:11:22

标签: mysql cross-join

假设我的表格中有以下行

表格行

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。

2 个答案:

答案 0 :(得分:16)

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

select r1.id, r2,id 
from rows r1 
cross join rows r2 
where r1.id < r2.id

答案 1 :(得分: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