【问题标题】:mysql cross join, but without duplicated pair?mysql交叉连接,但没有重复对?
【发布时间】:2011-07-19 21:36:09
【问题描述】:

假设我的表中有以下行

表格行

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。

【问题讨论】:

  • 在每行前面加上四个额外的空格应该用于您想要标记为代码的行。要在非代码文本中保留间距,请使用<pre>
  • @outis // 感谢您的编辑!
  • 通常我喜欢set a man on fire,但你已经知道四个空格在 Markdown 中的作用了。

标签: mysql cross-join


【解决方案1】:

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

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

【讨论】:

    【解决方案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
    

    【讨论】:

      猜你喜欢
      • 2012-10-07
      • 2015-10-18
      • 2015-06-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-08-22
      • 2020-09-22
      相关资源
      最近更新 更多