假设我的表格中有以下行
表格行
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。
答案 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