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

Oracle-SQLからANSISQLへの変換

    このセクションが問題の原因である可能性があります:

      FROM BOM_CHILDS C
         , XX_MAIN.XX_MAST MAST
         , XX_MAIN.XX_STPO STPO
      WHERE C.MATNR = MAST.MATNR(+)
       AND MAST.STLNR = STPO.STLNR(+)
       AND MAST.STLAN(+) = '1'
       AND MAST.WERKS(+) = C.WERKS
       AND STPO.IDNRK IS NULL
    

    これを少し簡単にするために、WHEREを再配置しましょう テーブルの関連性によってテーブルを並べ替える句:

    FROM BOM_CHILDS C
     , XX_MAIN.XX_MAST MAST
     , XX_MAIN.XX_STPO STPO
    -- Joining C to MAST
    WHERE C.MATNR = MAST.MATNR(+)
      AND C.WERKS = MAST.WERKS(+)
      AND MAST.STLAN(+) = '1'
    -- Joining MAST to STPO
      AND MAST.STLNR = STPO.STLNR(+)
      AND STPO.IDNRK IS NULL
    

    Cがあります MASTに参加しました Cを使用する 「ドライバー」テーブルとして、MASTからデータを取得します 一致する場所(左結合):

    FROM BOM_CHILDS C
    LEFT JOIN XX_MAIN.XX_MAST MAST
      ON C.MANTR = MAST.MANTR
     AND C.WERKS = MAST.WERKS
     AND MAST.STLAN = '1'
    

    次に、STPOを追加する必要があります 参加者へ:

    LEFT JOIN XX_MAIN.XX_STPO STPO
      ON MAST.STLNR = STPO.STLNR
     AND STPO.IDNRK IS NULL
    

    すべてをまとめると、次のようになります。

    FROM BOM_CHILDS C
    LEFT JOIN XX_MAIN.XX_MAST MAST
      ON C.MANTR = MAST.MANTR
     AND C.WERKS = MAST.WERKS
     AND MAST.STLAN = '1'
    LEFT JOIN XX_MAIN.XX_STPO STPO
      ON MAST.STLNR = STPO.STLNR
     AND STPO.IDNRK IS NULL
    

    そうです(+) 左/右/外部結合で機能します。Oracleは推奨しません それを使用する :




    1. WordPressデータベースに新しい列を追加する

    2. postgresの行をマージし、nullでない場合は値を最新のものに置き換えます

    3. x日連続でチェック-データベースにタイムスタンプを指定

    4. C#で参照カーソルを返すOracle関数を実行します