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 .