Có thể viết truy vấn nối mà không cần ON
câu lệnh không? và các phép nối này LEFT JOIN, RIGHT JOIN
hoạt động khác nhau như thế nào .
Có thể viết truy vấn nối mà không cần ON
câu lệnh không? và các phép nối này LEFT JOIN, RIGHT JOIN
hoạt động khác nhau như thế nào .
Câu trả lời:
Tài liệu MySQL bao gồm chủ đề này.
Đây là một bản tóm tắt. Khi sử dụng join
hoặc inner join
, on
điều kiện là tùy chọn. Điều này khác với tiêu chuẩn ANSI và khác với hầu hết mọi cơ sở dữ liệu khác. Hiệu quả là a cross join
. Tương tự, bạn có thể sử dụng on
mệnh đề with cross join
, mệnh đề này cũng khác với SQL tiêu chuẩn.
Phép nối chéo tạo ra tích Đề-các - tức là mọi kết hợp có thể có của 1 hàng từ bảng đầu tiên và 1 hàng từ bảng thứ hai. Phép nối chéo cho bảng có ba hàng ('a', 'b' và 'c') và bảng có bốn hàng (giả sử 1, 2, 3, 4) sẽ có 12 hàng.
Trong thực tế, nếu bạn muốn nối chéo, hãy sử dụng cross join
:
from A cross join B
tốt hơn nhiều so với:
from A, B
và:
from A join B -- with no on clause
Các on
khoản là cần thiết cho một bên phải hoặc trái bên ngoài tham gia, vì vậy các cuộc thảo luận không liên quan cho họ.
Nếu bạn cần hiểu các kiểu nối khác nhau, thì bạn cần thực hiện một số nghiên cứu về cơ sở dữ liệu quan hệ. Stackoverflow không phải là nơi thích hợp cho mức độ thảo luận đó.
Xem một số ví dụ trong http://www.sitepoint.com/und hieu-sql-joins-mysql-database/
Bạn có thể sử dụng 'USING' thay vì 'ON' như trong truy vấn
SELECT * FROM table1 LEFT JOIN table2 USING (id);
Bạn cũng có thể muốn điều tra việc sử dụng UNION, kết hợp nhiều bảng cho một đầu ra: SQL - Kết hợp hai bảng cho một đầu ra
ON
mệnh đề cho máy chủ biết các bảng có liên quan như thế nào, không. Nếu các kiểu kết hợp khác nhau của bạn đều cho cùng một kết quả thì bằng cách nào đó, bạn đang làm sai và thêm một số mã có thể giúp chúng tôi phát hiện ra vấn đề của bạn. Trong thời gian ngắn , hãy truy cập blog của Jeff Atwood để xem phần giới thiệu 2 phút về các kiểu tham gia khác nhau.