Có thể viết truy vấn tham gia mà không có câu hỏi ON
không? và các tham gia này khác nhau như thế nào LEFT JOIN, RIGHT JOIN
hoạt động.Làm thế nào để sử dụng mysql JOIN mà không có điều kiện ON?
Trả lời
MySQL documentation bao gồm chủ đề này.
Đây là bản tóm tắt. Khi sử dụng join
hoặc inner join
, điều kiện on
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 các cơ sở dữ liệu khác. Hiệu ứng là cross join
. Tương tự, bạn có thể sử dụng mệnh đề on
với cross join
, cũng khác với SQL chuẩn.
Tham gia chéo tạo ra một sản phẩm Descartes - nghĩa 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ừ hàng thứ hai. Việc nối chéo cho một bảng với ba hàng ('a', 'b', và 'c') và một bảng có bốn hàng (nói 1, 2, 3, 4) sẽ có 12 hàng.
Trong thực tế, nếu bạn muốn làm một chéo tham gia, sau đó sử dụng cross join
:
from A cross join B
là tốt hơn nhiều so với:
from A, B
và:
from A join B -- with no on clause
Các on
mệnh đề được yêu cầu cho một tham gia bên ngoài bên phải hoặc bên trái, vì vậy cuộc thảo luận không liên quan cho họ.
Nếu bạn cần hiểu các loại kết 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à một nơi thích hợp cho mức độ thảo luận đó.
Xem một số ví dụ trong http://www.sitepoint.com/understanding-sql-joins-mysql-database/
Bạn có thể sử dụng 'SỬ DỤNG' thay vì 'ON' như trong truy vấn
SELECT * FROM table1 LEFT JOIN table2 USING (id);
Để làm rõ thêm, cột tham gia trong cả hai bảng phải được đặt tên giống nhau để SỬ DỤNG để làm việc – rmirabelle
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 - Combine two tables for one output
Làm thế nào mà thậm chí có liên quan đến câu hỏi của OP? –
Khi mệnh đề 'ON' cho máy chủ biết cách các bảng có liên quan, không. Nếu các loại tham gia khác nhau của bạn đều cho kết quả tương tự, bạn sẽ làm sai điều gì đó và thêm một số mã có thể giúp chúng tôi phát hiện sự cố của bạn. Trong thời gian có nghĩa là đi đến [blog của Jeff Atwood] (http://www.codinghorror.com/blog/2007/10/a-visual-explanation-of-sql-joins.html) trong phần giới thiệu 2 phút cho các loại tham gia khác nhau. – fvu