Bạn nên bắt đầu sử dụng cú pháp JOIN chuẩn. Ngoài việc dễ đọc hơn (ít nhất là theo ý kiến của tôi), nó cũng bảo vệ bạn khỏi các phép tham gia cartesian ngẫu nhiên nếu bạn quên điều kiện tham gia thực tế trong mệnh đề WHERE. Thêm vào đó, nó có thể di động trên gần như tất cả DBMS trái ngược với (+)
phức tạp cú pháp được sử dụng bởi Oracle (cũng có một số hạn chế mà cú pháp JOIN không có)
Đây là truy vấn được viết lại bằng cách sử dụng các phép nối rõ ràng (thay vì ngầm định):
SELECT DISTINCT ope.ope_operationid,
ser.ser_code,
opt.opt_code,
ost.ost_code
FROM od_operation ope,
LEFT JOIN od_service_type ser ON ope.ser_id = ser.ser_id
LEFT JOIN od_operation_type opt ON opt.opt_id = ope.opt_id
LEFT JOIN od_status_type ost ON ost.ost_id = ope.ost_id
LEFT JOIN od_equipment_type eqt ON ????????
WHERE ope.opt_id = 3781
AND ope.ope_operationid = 'LAA351BP'
Chỉnh sửa
Điều kiện tham gia bị thiếu trên od_equipment_type
chính xác là lý do tại sao cú pháp JOIN được ưa thích. Nếu dấu phẩy ở cuối trong SQL gốc bị xóa, câu lệnh sẽ tạo ra một phép nối cacte không mong muốn có thể có tác động nghiêm trọng đến máy chủ nếu các bảng liên quan lớn.
Với cú pháp THAM GIA, bạn sẽ luôn gặp lỗi cú pháp khiến bạn không mắc phải những lỗi chính tả như vậy. Việc sử dụng phép nối ngầm sẽ chỉ gây ra lỗi khi bạn để lại dấu phẩy trong danh sách FROM, nhưng không bao giờ xảy ra nếu bạn bỏ lỡ điều kiện kết hợp trong WHERE