Điều cũng đáng để chỉ ra, là nếu bạn đang sử dụng USING
, thì bạn có thể nhận được một tập kết quả khác như từ a JOIN
. Đọc phần trích dẫn dưới đây trên tài liệu THAM GIA :
Tham gia xử lý các thay đổi trong MySQL 5.0.12
Ghi chú:
Các phép nối tự nhiên và nối với USING, bao gồm các biến thể nối ngoài, được xử lý theo tiêu chuẩn SQL: 2003. Mục tiêu là căn chỉnh cú pháp và ngữ nghĩa của MySQL đối với THAM GIA TỰ NHIÊN và THAM GIA ... SỬ DỤNG theo SQL: 2003. Tuy nhiên, những thay đổi trong xử lý nối này có thể dẫn đến các cột đầu ra khác nhau cho một số phép nối. Ngoài ra, một số truy vấn có vẻ hoạt động chính xác trong các phiên bản cũ hơn (trước 5.0.12) phải được viết lại để tuân thủ tiêu chuẩn.
Những thay đổi này có năm khía cạnh chính:
Cách mà MySQL xác định các cột kết quả của các hoạt động tham gia TỰ NHIÊN hoặc SỬ DỤNG (và do đó là kết quả của toàn bộ mệnh đề TỪ).
Mở rộng CHỌN * và CHỌN tbl_name. * Vào danh sách các cột được chọn.
Độ phân giải của tên cột trong TỰ NHIÊN hoặc SỬ DỤNG tham gia.
Chuyển đổi TỰ NHIÊN hoặc SỬ DỤNG tham gia vào THAM GIA ... BẬT.
Độ phân giải của các tên cột trong điều kiện BẬT của THAM GIA ... BẬT.
Thay đổi thú vị nhất có lẽ là (bây giờ được trích dẫn từ tài liệu)
LEFT JOIN b USING (c1,c2,c3)
LEFT JOIN b ON a.c1=b.c1 AND a.c2=b.c2 AND a.c3=b.c3
không còn hoàn toàn giống nhau, liên quan đến việc xác định cột nào sẽ hiển thị để SELECT *
mở rộng. Phép USING
nối chọn giá trị liên kết của các cột tương ứng, trong khi phép ON
nối chọn tất cả các cột từ tất cả các bảng. Đối với phép USING
nối trước , SELECT *
chọn các giá trị sau:
COALESCE(a.c1,b.c1), COALESCE(a.c2,b.c2), COALESCE(a.c3,b.c3)
Để ON
tham gia, SELECT *
chọn các giá trị sau:
a.c1, a.c2, a.c3, b.c1, b.c2, b.c3
Với phép nối bên trong, COALESCE(a.c1,b.c1)
giống như một a.c1
hoặc b.c1
bởi vì cả hai cột sẽ có cùng giá trị. Với một liên kết ngoài (chẳng hạn như LEFT JOIN
), một trong hai cột có thể NULL
. Cột đó sẽ được bỏ qua từ kết quả.