PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Защо условията на CROSS JOIN не работят в клаузата „ON“, а само в клаузата WHERE?

CROSS JOIN е SQL операторът за извършване на пълен декартов продукт между две таблици. Тъй като е декартов продукт, той не позволява никакви условияпо време на операцията , можете само да ограничите неговия резултат с някаква филтрираща операция (условието WHERE).

Операторите JOIN (INNER и OUTER JOIN, т.е.) са просто декартово произведение заедно с оператора за филтриране, изразен в частта ON на оператора (и всъщност в оригиналния синтаксис на SQL нямаше JOIN оператор, просто „запетая“ нотация за обозначаване на продукта с условието за свързване, изразено винаги в частта WHERE).

Примери:

"стара" нотация:

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

еквивалентно на „модерната“ нотация:

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

докато за декартовия продукт:

"стара" нотация:

SELECT ...
FROM table1 t1, table2 t2

еквивалентно на „модерната“ нотация:

SELECT ...
FROM table1 t1 CROSS JOIN table2 t2

С други думи, CROSS JOIN, който изисква условие, всъщност е някакъв вид 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. Няма резултати, върнати от грешката на заявката в PostgreSQL

  2. Повторно вземане на проби от данни от времеви серии

  3. Използване на функцията за прозорец OVER в SQLAlchemy

  4. Django:Променете TimeField на DateTimeField в models.py

  5. Как да направя тригер за актуализиране на колона в друга таблица?