Проблем:
Искате да получите всички комбинации от редове от две таблици в 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
.