【问题标题】:SQL: self join using each rows only once [duplicate]SQL:每行仅使用一次自联接[重复]
【发布时间】:2011-11-19 03:50:11
【问题描述】:

可能重复:
combinations (not permutations) from cross join in sql

我目前有一个包含以下记录的表:

A1
A2
A3
B1
B2
C1
C2

相同的字母表示一些共同的标准(例如,“字母”列的共同值)。我按照以下标准进行自我加入:

SELECT mytable.*, self.* FROM mytable INNER JOIN mytable AS self 
   ON (mytable.letter = self.letter and mytable.number != self.number);

此连接给出如下内容:

A1 A2
A2 A1
A1 A3
A3 A1
A2 A3
A3 A2
B1 B2
B2 B1
C1 C2
C2 C1

但是,我只想将每一对包含一次(组合而不是排列)。 我将如何获得以下信息:

A1 A2
A1 A3
A2 A3
B1 B2
C1 C2

【问题讨论】:

  • 已将标签“自加入”添加到该答案中,这就是我搜索的内容。

标签: sql join self-join


【解决方案1】:

稍微改变 JOIN 条件就能达到你想要的效果..

代替:

ON (mytable.letter = self.letter and mytable.number != self.number)

使用

ON (mytable.letter = self.letter and mytable.number > self.number)

这将仅包括 self.number 大于 mytable.number 的组合,这实际上将结果限制为每个组合的一个有效顺序...

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-03-06
    • 2019-01-20
    • 2018-09-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多