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

tham gia có điều kiện trong oracle

Kết quả sau:

| TAB1_COL1 | TAB1_COL2 | LKP_COL3 |
|-----------|-----------|----------|
|        10 |       101 |       50 |
|        11 |       102 |       50 |
|        12 |       101 |    99.99 |
|        13 |       103 |       40 |
|        13 |       103 |       60 |
|        14 |       104 |      100 |
|        15 |       108 |       20 |
|        15 |       108 |       80 |
|        16 |       102 |    99.99 |

được tạo ra bởi truy vấn này:

SELECT DISTINCT
      tab1.tab1_col1
    , tab1.tab1_col2
    , COALESCE(lkp1.lkp_col3, lkp2.lkp_col3, 99.99) "LKP_COL3"
FROM tab1
      LEFT JOIN lkp1
                  ON tab1.tab1_col1 = lkp1.lkp_col1
                        AND tab1.tab1_col2 = lkp1.lkp_col2
                        AND lkp1.lkp_col4 = 'PICK'
      LEFT JOIN lkp1 lkp2
                  ON tab1.tab1_col1 = lkp2.lkp_col1
                        AND lkp2.lkp_col4 = 'PICK'
ORDER BY
      tab1.tab1_col1
    , tab1.tab1_col2
;

DISTINCT đã được thêm vào vì phép nối bên trái (ngoài cùng) thứ hai tạo ra sự lặp lại không mong muốn trong đầu ra.

tham khảo sqlfiddle này




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Hàm ROWIDTONCHAR () trong Oracle

  2. regexp_replace:chèn một khoảng trắng trong một chuỗi nếu chưa có

  3. DatabaseMetaData.getColumns trả về một ResultSet trống cho các từ đồng nghĩa

  4. Tương đương với tầng hạn chế thả Oracle trong Sql Server

  5. Cách tìm nạp chuỗi nhiều đối sánh bằng biểu thức chính quy