Database
 sql >> Database >  >> RDS >> Database

Come ottenere tutte le possibili combinazioni di righe da due tabelle in SQL

Problema:

Vuoi ottenere tutte le combinazioni di righe da due tabelle in SQL.

Esempio:

Ecco due tabelle:una contiene lettere (letters ) e l'altro contiene numeri (numbers ):

lettera
X
S
numero
0
1
2

Soluzione 1:

Per combinare ogni riga delle letters tabella con ogni riga dei numbers tabella, useremo il CROSS JOIN :

SELECT *
FROM letters
CROSS JOIN numbers;

Il risultato della query è simile al seguente:

lettera numero
X 0
S 0
X 1
S 1
X 2
S 2

Soluzione 2:

Un altro modo per eseguire il CROSS JOIN è il seguente:

SELECT *
FROM letters, numbers;

Questo otterrà lo stesso identico risultato prodotto dalla query precedente.

Discussione:

Come regola generale, un CROSS JOIN produce un set di risultati in cui ogni riga di una tabella viene unita a ogni riga di un'altra tabella. In altre parole, se la prima tabella memorizza n righe e la seconda tabella memorizza m righe, quindi un CROSS JOIN risulterà in un prodotto cartesiano di n × m righe. Questo è il motivo per cui ci sono sei righe restituite dalla query nell'esempio sopra.

Perché un CROSS JOIN produce tutte le possibili combinazioni delle righe tra le tabelle da unire, non è necessario specificare una relazione. Quindi, a differenza di altri JOINs , non c'è ON clausola in un CROSS JOIN .