Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Połączenie krzyżowe bez zduplikowanych kombinacji

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 case wyrażenia 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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Czy używasz odpowiednich narzędzi do monitorowania wydajności bazy danych?

  2. Jak podzielić ciąg na kolumny dla widoku?

  3. Uzyskaj jeden z wpisów w zduplikowanych rekordach

  4. W jakiej kolumnie należy umieścić indeks klastrowy?

  5. Uzyskaj uprawnienia do kolumn dla tabeli w SQL Server przy użyciu T-SQL:sp_column_privileges