Problem:
Du vill hämta alla kombinationer av rader från två tabeller i SQL.
Exempel:
Här är två tabeller:en innehåller bokstäver (letters
), och den andra innehåller siffror (numbers
):
brev |
---|
X |
Y |
nummer |
---|
0 |
1 |
2 |
Lösning 1:
För att kombinera varje rad av letters
tabell med varje rad av numbers
tabell kommer vi att använda CROSS JOIN
:
SELECT * FROM letters CROSS JOIN numbers;
Resultatet av frågan ser ut så här:
brev | nummer |
---|---|
X | 0 |
Y | 0 |
X | 1 |
Y | 1 |
X | 2 |
Y | 2 |
Lösning 2:
Ett annat sätt att utföra CROSS JOIN är följande:
SELECT * FROM letters, numbers;
Detta kommer att få exakt samma resultat som den föregående frågan.
Diskussion:
Som en allmän regel, en CROSS JOIN
producerar en resultatuppsättning där varje rad från en tabell är sammanfogad med varje rad i en annan tabell. Med andra ord, om den första tabellen lagrar n rader och den andra tabellen lagrar m rader och sedan en CROSS JOIN
kommer att resultera i en kartesisk produkt av n × m rader. Det är därför det finns sex rader som returneras av frågan i exemplet ovan.
Eftersom en CROSS JOIN
producerar alla möjliga kombinationer av raderna bland tabellerna som sammanfogas, finns det inget behov av att ange en relation. Så till skillnad från andra JOINs
, det finns ingen ON
sats i en CROSS JOIN
.