PostgreSQL
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> PostgreSQL

Tại sao điều kiện CROSS JOIN không hoạt động trong mệnh đề 'ON', chỉ có mệnh đề WHERE?

CROSS JOIN là toán tử SQL để thực hiện một sản phẩm cacte đầy đủ giữa hai bảng. Vì nó là một sản phẩm của cartesian, nó không cho phép bất kỳ điều kiện nào trong quá trình hoạt động , bạn chỉ có thể hạn chế kết quả của nó bằng một số thao tác lọc (điều kiện WHERE).

Các toán tử JOIN (INNER và OUTER JOIN, tức là), chỉ đơn giản là tích cacte cùng với toán tử lọc được thể hiện trong phần BẬT của toán tử (và trên thực tế, trong cú pháp ban đầu của SQL không có toán tử JOIN, chỉ đơn giản là "dấu phẩy" ký hiệu để biểu thị sản phẩm với điều kiện tham gia luôn được thể hiện trong phần WHERE).

Ví dụ:

ký hiệu "cũ":

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

tương đương với ký hiệu "hiện đại":

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

trong khi, đối với sản phẩm cacte:

ký hiệu "cũ":

SELECT ...
FROM table1 t1, table2 t2

tương đương với ký hiệu "hiện đại":

SELECT ...
FROM table1 t1 CROSS JOIN table2 t2

Nói cách khác, một CROSS JOIN yêu cầu một điều kiện thực sự là một loại 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. Làm thế nào để biểu diễn nhiều thuộc tính tương tự của một thực thể trong cơ sở dữ liệu?

  2. Làm thế nào để tăng nặng số nguyên trong postgresql?

  3. Xóa phụ huynh nếu nó không được tham chiếu bởi bất kỳ đứa trẻ nào khác

  4. Trả về dữ liệu từ lựa chọn con được sử dụng trong CHÈN trong Biểu thức Bảng Thông thường

  5. Không thể nhập .csv vào Cloud SQL từ bảng điều khiển