Oracle
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Oracle

Truy vấn SQL để trả về một hàng ngay cả khi không tìm thấy, với ít nhất là trong các tham số

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




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Làm cách nào để tôi có được định nghĩa đầy đủ (sql) về các chế độ xem hệ thống như user_objects?

  2. Làm cách nào để tạo (hoặc lấy) tập lệnh ddl trên một bảng hiện có trong oracle? Tôi phải tạo lại chúng trong Hive

  3. Giới thiệu về PL / SQL Thu thập hàng loạt trong Cơ sở dữ liệu Oracle

  4. làm thế nào để gán giá trị cho biến trong biểu thức cho một khối PL / SQL?

  5. Tạo một chuỗi cho trường varchar2 trong Oracle