Problem:
Du ønsker at få alle kombinationer af rækker fra to tabeller i SQL.
Eksempel:
Her er to tabeller:den ene indeholder bogstaver (letters
), og den anden indeholder tal (numbers
):
brev |
---|
X |
Y |
nummer |
---|
0 |
1 |
2 |
Løsning 1:
For at kombinere hver række af letters
tabel med hver række af numbers
tabel, vil vi bruge CROSS JOIN
:
SELECT * FROM letters CROSS JOIN numbers;
Resultatet af forespørgslen ser således ud:
brev | nummer |
---|---|
X | 0 |
Y | 0 |
X | 1 |
Y | 1 |
X | 2 |
Y | 2 |
Løsning 2:
En anden måde at udføre CROSS JOIN på er som følger:
SELECT * FROM letters, numbers;
Dette vil få nøjagtigt det samme resultat som den forrige forespørgsel.
Diskussion:
Som en generel regel er en CROSS JOIN
producerer et resultatsæt, hvor hver række fra en tabel er forbundet med hver række i en anden tabel. Med andre ord, hvis den første tabel gemmer n rækker, og den anden tabel gemmer m rækker, derefter en CROSS JOIN
vil resultere i et kartesisk produkt af n × m rækker. Dette er grunden til, at der returneres seks rækker af forespørgslen i eksemplet ovenfor.
Fordi en CROSS JOIN
producerer alle mulige kombinationer af rækkerne blandt de tabeller, der samles, er der ingen grund til at angive en relation. Så i modsætning til andre JOINs
, der er ingen ON
klausul i en CROSS JOIN
.