Wiem, że to pytanie jest bardzo podobne do tego: Symetryczne połączenie krzyżowe i ten też: kombinacje (nie permutacje) z połączenia krzyżowego w sql
Ale co jeśli mamy dwa różne stoły, powiedzmy A i B:
select A.id,B.id from A cross join B
I chcę rozważyć parę (a,b)
równą (b,a)
?
2 odpowiedzi
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 mojej małej nienaukowej wypiekaniu z malutkimi stolikami ten drugi 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
Czy nie dałoby to również pożądanego rezultatu?
select A.id,B.id from A cross join B on A.id >= B.id
Podobne pytania
Powiązane pytania
Nowe pytania
sql
Structured Query Language (SQL) to język służący do wykonywania zapytań w bazach danych. Pytania powinny zawierać przykłady kodu, strukturę tabeli, przykładowe dane i znacznik używanej implementacji DBMS (np. MySQL, PostgreSQL, Oracle, MS SQL Server, IBM DB2 itp.). Jeśli Twoje pytanie dotyczy wyłącznie konkretnego DBMS (używa określonych rozszerzeń / funkcji), użyj zamiast tego tagu tego DBMS. Odpowiedzi na pytania oznaczone tagiem SQL powinny używać standardu SQL ISO / IEC.