sql >> Databáze >  >> RDS >> Database

Jak získat všechny možné kombinace řádků ze dvou tabulek v SQL

Problém:

Chcete získat všechny kombinace řádků ze dvou tabulek v SQL.

Příklad:

Zde jsou dvě tabulky:jedna obsahuje písmena (letters ) a druhý obsahuje čísla (numbers ):

dopis
X
Y
číslo
0
1
2

Řešení 1:

Aby bylo možné zkombinovat každý řádek letters tabulka s každým řádkem numbers tabulky, použijeme CROSS JOIN :

SELECT *
FROM letters
CROSS JOIN numbers;

Výsledek dotazu vypadá takto:

dopis číslo
X 0
Y 0
X 1
Y 1
X 2
Y 2

Řešení 2:

Další způsob provedení CROSS JOIN je následující:

SELECT *
FROM letters, numbers;

Získáte přesně stejný výsledek jako předchozí dotaz.

Diskuse:

Obecným pravidlem je CROSS JOIN vytváří sadu výsledků, ve které je každý řádek z jedné tabulky spojen s každým řádkem jiné tabulky. Jinými slovy, pokud první tabulka obsahuje n řádky a druhá tabulka ukládá m řádky a poté CROSS JOIN výsledkem bude kartézský produkt z n × m řádky. To je důvod, proč je ve výše uvedeném příkladu dotazem vráceno šest řádků.

Protože CROSS JOIN vytváří všechny možné kombinace řádků mezi spojovanými tabulkami, není třeba zadávat vztah. Tedy na rozdíl od jiných JOINs , není žádné ON klauzule v CROSS JOIN .


  1. zvýšit číslo řádku, když se změní hodnota pole v Oracle

  2. Oznámení MySQL 5.6 EOL

  3. Usnadnění správy produkční databáze PostgreSQL

  4. Mapování cizího klíče s vlastním názvem sloupce