2012-10-17 19 views

Odpowiedz

11
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 

Jeśli chcesz być bardziej wyrafinowany:

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 

W moim małym nienaukowy piec wyłączony z maleńkich stolikach, ten ostatni był szybszy. A poniżej wyrażenia case zapisane jako podzapytania.

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 
+1

Nie powinno być "<=" w jednym z warunków? – podiluska

+0

+1 z wyjątkiem jednego z dołączeń powinno zawierać 'a = b', tzn.' A.id <= b.id' – Bohemian

+0

@podiluska good catch! – RichardTheKiwi

Powiązane problemy