sql >> データベース >  >> RDS >> Oracle

Oracleでの条件付き結合

    次の結果:

    | 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 |
    

    このクエリによって生成されました:

    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が追加されたのは、左から2番目(外側)の結合によって出力に不要な繰り返しが生成されるためです。

    このsqlfiddle を参照してください




    1. 降順からのMySQLの制限

    2. mysql自動インクリメントエラー

    3. Oracle10とJDBC:比較時にCHARに末尾のスペースを無視させる方法は?

    4. PDOを使用したPHPでの各登録ユーザーのデータの取得と表示