2013-05-09 34 views
57

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?

+0

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

Trả lời

84

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 đó.

2

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

+0

Làm thế nào mà thậm chí có liên quan đến câu hỏi của OP? –

Các vấn đề liên quan