PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Dlaczego warunki CROSS JOIN nie działają w klauzuli „ON”, tylko klauzula WHERE?

CROSS JOIN to operator SQL do wykonania pełnego iloczynu kartezjańskiego między dwiema tabelami. Ponieważ jest to produkt kartezjański, nie dopuszcza żadnych warunków podczas operacji , możesz ograniczyć jego wynik tylko za pomocą jakiejś operacji filtrowania (warunek WHERE).

Operatory JOIN (INNER i OUTER JOIN, czyli) są po prostu iloczynem kartezjańskim razem z operatorem filtrującym wyrażonym w części ON operatora (a tak naprawdę w oryginalnej składni SQL nie było operatora JOIN, po prostu „przecinek” notacja oznaczająca produkt z warunkiem połączenia wyrażonym zawsze w części WHERE).

Przykłady:

"stara" notacja:

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

odpowiednik "nowoczesnej" notacji:

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

natomiast dla produktu kartezjańskiego:

"stara" notacja:

SELECT ...
FROM table1 t1, table2 t2

odpowiednik "nowoczesnej" notacji:

SELECT ...
FROM table1 t1 CROSS JOIN table2 t2

Innymi słowy, CROSS JOIN, które wymagają warunku, jest w rzeczywistości jakimś rodzajem INNER JOIN.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Wybierz liczbę wierszy w innej tabeli w instrukcji Postgres SELECT

  2. Wartości w kolumnach PostgreSQL muszą być w sekwencji

  3. Jak uruchomić PostgreSQL jako usługę w systemie Windows?

  4. SQLAlchemy func.count w kolumnie logicznej

  5. Czy można odbudować pg_depend?