Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Cross Join без дублиращи се комбинации

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


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Шестнадесетичната стойност 0x00 е невалиден знак

  2. Сортиране въз основа на следващ и предишен запис в SQL

  3. Какви са случаите на използване за избор на CHAR пред VARCHAR в SQL?

  4. Как да оценим вход в клаузата WHERE

  5. HTTP Status 500 - Java Runtime Environment (JRE) версия 1.7 не се поддържа от този драйвер