交叉连接,无重复组合

Fel*_*ano 11 sql sql-server-2005

我知道这个问题与这个问题非常相似: 对称交叉连接 也是这个问题: 在sql中交叉连接的组合(不是排列)

但是,如果我们有两个不同的表,比如说A和B:

select A.id,B.id from A cross join B
Run Code Online (Sandbox Code Playgroud)

而且我想考虑一对(a,b)等于(b,a)

Ric*_*iwi 15

select A.id aid,B.id bid
from A inner join B on a.id <= b.id
union
select B.id,A.id
from A inner join B on b.id < a.id
Run Code Online (Sandbox Code Playgroud)

如果你想变得更复杂:

select distinct
       case when a.id<=b.id then a.id else b.id end id1,
       case when a.id<=b.id then b.id else a.id end id2
from A cross join B
Run Code Online (Sandbox Code Playgroud)

在我用小桌子烘烤的小不科学中,后者更快.在下面,case表达式作为子查询.

select distinct
       (select MIN(id) from (select a.id union select b.id)[ ]) id1,
       (select MAX(id) from (select a.id union select b.id)[ ]) id2
from A cross join B
Run Code Online (Sandbox Code Playgroud)