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

So erhalten Sie alle möglichen Kombinationen von Zeilen aus zwei Tabellen in SQL

Problem:

Sie möchten alle Zeilenkombinationen aus zwei Tabellen in SQL abrufen.

Beispiel:

Hier sind zwei Tabellen:Eine enthält Buchstaben (letters ) und das andere Zahlen enthält (numbers ):

Buchstabe
X
J
Zahl
0
1
2

Lösung 1:

Um jede Reihe der letters Tabelle mit jeder Zeile der numbers Tabelle verwenden wir den CROSS JOIN :

SELECT *
FROM letters
CROSS JOIN numbers;

Das Ergebnis der Abfrage sieht so aus:

Buchstabe Nummer
X 0
J 0
X 1
J 1
X 2
J 2

Lösung 2:

Eine andere Möglichkeit, den CROSS JOIN auszuführen, ist wie folgt:

SELECT *
FROM letters, numbers;

Dadurch erhalten Sie genau das gleiche Ergebnis wie bei der vorherigen Abfrage.

Diskussion:

In der Regel ein CROSS JOIN erzeugt eine Ergebnismenge, in der jede Zeile einer Tabelle mit jeder Zeile einer anderen Tabelle verknüpft wird. Mit anderen Worten, wenn die erste Tabelle n speichert Zeilen und die zweite Tabelle speichert m Zeilen, dann ein CROSS JOIN ergibt ein kartesisches Produkt von n × m Reihen. Aus diesem Grund gibt die Abfrage im obigen Beispiel sechs Zeilen zurück.

Denn ein CROSS JOIN alle möglichen Kombinationen der Zeilen zwischen den verknüpften Tabellen erzeugt, muss keine Beziehung angegeben werden. Anders als bei anderen JOINs , gibt es kein ON -Klausel in einem CROSS JOIN .