sql >> Databáze >  >> RDS >> PostgreSQL

Proč podmínky CROSS JOIN nefungují v klauzuli 'ON', pouze v klauzuli WHERE?

CROSS JOIN je operátor SQL, který provádí úplný kartézský součin mezi dvěma tabulkami. Jelikož se jedná o kartézský produkt, neumožňuje během operace žádné podmínky , jeho výsledek můžete omezit pouze pomocí nějaké operace filtrování (podmínka WHERE).

Operátory JOIN (INNER a OUTER JOIN, tedy) jsou prostě kartézský součin spolu s filtrovacím operátorem vyjádřeným v ON části operátoru (a ve skutečnosti v původní syntaxi SQL nebyl žádný operátor JOIN, prostě „čárka“ zápis pro označení produktu s podmínkou spojení vyjádřenou vždy v části WHERE).

Příklady:

"starý" zápis:

SELECT ...
FROM table1 t1, table2 t2
WHERE t1.attribute = t2.attribute

ekvivalentní k "modernímu" zápisu:

SELECT ...
FROM table1 t1 INNER JOIN table2 t2 ON t1.attribute = t2.attribute

zatímco pro kartézský součin:

"starý" zápis:

SELECT ...
FROM table1 t1, table2 t2

ekvivalentní k "modernímu" zápisu:

SELECT ...
FROM table1 t1 CROSS JOIN table2 t2

Jinými slovy, CROSS JOIN, který vyžaduje podmínku, je ve skutečnosti nějaký druh INNER JOIN.




  1. mysql smazat při připojení?

  2. vrátí nuly pro data, která neexistují MYSQL GROUP BY

  3. odstranit duplicitní pole ve výsledkových řádcích php-mysql

  4. Oracle SQL trigger pro automatické nastavení hodnoty sloupce