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

Как да получите всички възможни комбинации от редове от две таблици в SQL

Проблем:

Искате да получите всички комбинации от редове от две таблици в SQL.

Пример:

Ето две таблици:едната съдържа букви (letters ), а другата съдържа числа (numbers ):

буква
X
Y
число
0
1
2

Решение 1:

За да комбинирате всеки ред от letters таблица с всеки ред от numbers таблица, ще използваме CROSS JOIN :

SELECT *
FROM letters
CROSS JOIN numbers;

Резултатът от заявката изглежда така:

буква номер
X 0
Y 0
X 1
Y 1
X 2
Y 2

Решение 2:

Друг начин за извършване на CROSS JOIN е както следва:

SELECT *
FROM letters, numbers;

Това ще получи точно същия резултат, получен от предишната заявка.

Дискусия:

Като общо правило, CROSS JOIN произвежда резултатен набор, в който всеки ред от една таблица се присъединява към всеки ред от друга таблица. С други думи, ако първата таблица съхранява n редове и втората таблица съхраняваm редове, след това CROSS JOIN ще доведе до декартов продукт от n × m редове. Ето защо има шест реда, върнати от заявката в примера по-горе.

Тъй като CROSS JOIN произвежда всички възможни комбинации от редовете между таблиците, които се свързват, няма нужда да се посочва връзка. Така че, за разлика от други JOINs , няма ON клауза в CROSS JOIN .


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Някои ВСЯКАКВИ агрегатни трансформации са нарушени

  2. Основи на табличните изрази, част 10 – Изгледи, SELECT * и промени в DDL

  3. Съхранение на данни:REST срещу POSIX за архиви и HSM

  4. Съхранена процедура за получаване на състоянието на индексите във всички бази данни

  5. Как да намерите и маскирате PII в Elasticsearch