我知道这个问题与这个问题非常相似: Symmetric cross join and this one: combinations (not permutations) from cross join in sql
但是如果我们有两个不同的表,比如 A 和 B:
select A.id,B.id from A cross join B
我想考虑这对(a,b)
等于(b,a)
?
我知道这个问题与这个问题非常相似: Symmetric cross join and this one: combinations (not permutations) from cross join in sql
但是如果我们有两个不同的表,比如 A 和 B:
select A.id,B.id from A cross join B
我想考虑这对(a,b)
等于(b,a)
?
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
如果你想更复杂:
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
在我用小桌子做的不科学的小烘焙中,后者更快。下面是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
这不是也能达到预期的结果吗?
select A.id,B.id from A cross join B on A.id >= B.id