Làm thế nào để sử dụng mysql JOIN mà không có điều kiện ON?


107

Có thể viết truy vấn nối mà không cần ONcâu lệnh không? và các phép nối này LEFT JOIN, RIGHT JOINhoạt động khác nhau như thế nào .


1
ONmệ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.
fvu

Câu trả lời:


153

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 joinhoặ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 onmệ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 onkhoả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 đó.


1
Chưa bao giờ nghe nói về một tham gia chéo hoặc cần một ... cho đến hôm nay!
goos


Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.