17

私はこの質問がこれと非常に似ていることを知っています: Symmetric cross join とこれも: cross join in sql からの組み合わせ (順列ではない)

しかし、A と B という 2 つの異なるテーブルがある場合はどうなるでしょうか。

select A.id,B.id from A cross join B

(a,b)そして、ペアが に等しいと考えたい(b,a)ですか?

4

2 に答える 2

20
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
于 2012-10-17T10:18:45.767 に答える