sql >> Database >  >> RDS >> Database

Hoe u alle mogelijke combinaties van rijen uit twee tabellen in SQL kunt krijgen

Probleem:

U wilt alle combinaties van rijen uit twee tabellen in SQL krijgen.

Voorbeeld:

Hier zijn twee tabellen:één bevat letters (letters ), en de andere bevat cijfers (numbers ):

letter
X
J
getal
0
1
2

Oplossing 1:

Om elke rij van de letters tabel met elke rij van de numbers tabel gebruiken we de CROSS JOIN :

SELECT *
FROM letters
CROSS JOIN numbers;

Het resultaat van de zoekopdracht ziet er als volgt uit:

letter nummer
X 0
J 0
X 1
J 1
X 2
J 2

Oplossing 2:

Een andere manier om de CROSS JOIN uit te voeren is als volgt:

SELECT *
FROM letters, numbers;

Dit geeft exact hetzelfde resultaat als bij de vorige zoekopdracht.

Discussie:

Als algemene regel geldt dat een CROSS JOIN produceert een resultatenset waarin elke rij van de ene tabel wordt samengevoegd met elke rij van een andere tabel. Met andere woorden, als de eerste tabel n . bevat rijen en de tweede tabel slaat m op rijen, dan een CROSS JOIN resulteert in een Cartesiaans product van n × m rijen. Dit is de reden waarom er zes rijen worden geretourneerd door de zoekopdracht in het bovenstaande voorbeeld.

Omdat een CROSS JOIN produceert alle mogelijke combinaties van de rijen tussen de tabellen die worden samengevoegd, het is niet nodig om een ​​relatie op te geven. Dus, in tegenstelling tot andere JOINs , er is geen ON clausule in een CROSS JOIN .


  1. SQL Server 2016:een relatie maken

  2. Takenlijst

  3. Schakel waarschuwingen en fouten uit in PHP en MySQL

  4. Een tabelafhankelijkheidsgrafiek maken met een recursieve query