sql >> Databasteknik >  >> RDS >> Database

Hur man får alla möjliga kombinationer av rader från två tabeller i SQL

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 .


  1. Oracle Konvertera TIMESTAMP med tidszon till DATUM

  2. OracleParameter och IN-klausul

  3. Inkrementell datareplikering i IRI Workbench

  4. MySQL MOD() Funktion – Utför en Modulo Operation i MySQL