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

Sådan får du alle mulige kombinationer af rækker fra to tabeller i SQL

Problem:

Du ønsker at få alle kombinationer af rækker fra to tabeller i SQL.

Eksempel:

Her er to tabeller:den ene indeholder bogstaver (letters ), og den anden indeholder tal (numbers ):

brev
X
Y
nummer
0
1
2

Løsning 1:

For at kombinere hver række af letters tabel med hver række af numbers tabel, vil vi bruge CROSS JOIN :

SELECT *
FROM letters
CROSS JOIN numbers;

Resultatet af forespørgslen ser således ud:

brev nummer
X 0
Y 0
X 1
Y 1
X 2
Y 2

Løsning 2:

En anden måde at udføre CROSS JOIN på er som følger:

SELECT *
FROM letters, numbers;

Dette vil få nøjagtigt det samme resultat som den forrige forespørgsel.

Diskussion:

Som en generel regel er en CROSS JOIN producerer et resultatsæt, hvor hver række fra en tabel er forbundet med hver række i en anden tabel. Med andre ord, hvis den første tabel gemmer n rækker, og den anden tabel gemmer m rækker, derefter en CROSS JOIN vil resultere i et kartesisk produkt af n × m rækker. Dette er grunden til, at der returneres seks rækker af forespørgslen i eksemplet ovenfor.

Fordi en CROSS JOIN producerer alle mulige kombinationer af rækkerne blandt de tabeller, der samles, er der ingen grund til at angive en relation. Så i modsætning til andre JOINs , der er ingen ON klausul i en CROSS JOIN .


  1. liste over skemaer med størrelser (relative og absolutte) i en PostgreSQL-database

  2. DATEDIFF_BIG() Eksempler i SQL Server

  3. 8 funktioner til at returnere dagen fra en dato i MariaDB

  4. Brug af PostgreSQL-replikeringspladser