1
SQL文をマテリアライズド・ビューとして実行し、後でテーブルをより大きなテーブルに結合しようとしています。私は大きなテーブルの項目/場所のコンボに関する重複する制約に違反する問題が発生しています。ここに私のマテリアライズド・ビュークエリです:私は一人でネストされたクエリを実行すると重複を返すSQLクエリ
SELECT /*+ materialize */ CAN.CNCL_CNT, CAN.ITEM, CAN.LOCATION,
CAN.LAST_CNCL_DTE, OL.CANCEL_ID
FROM ORDLOC OL,
(SELECT COUNT(CANCEL_DATE) AS CNCL_CNT, ITEM, LOCATION,
MAX(CANCEL_DATE) AS LAST_CNCL_DTE
FROM ORDLOC
WHERE CANCEL_DATE between (to_date(20160123,'yyyymmdd') -60) and to_date(20160123,'yyyymmdd')
AND CANCEL_DATE IS NOT NULL
GROUP BY ITEM, LOCATION) CAN
WHERE CAN.ITEM = OL.ITEM
AND CAN.LOCATION = OL.LOCATION
AND CAN.LAST_CNCL_DTE = OL.CANCEL_DATE
GROUP BY CAN.CNCL_CNT, CAN.ITEM, CAN.LOCATION, CAN.LAST_CNCL_DTE, OL.CANCEL_ID
今、私は数百行以下を持っている、といくつか存在します全体クエリを実行するときにアイテム/場所コンボは、しかし、すべて一意です重複したアイテム/ロケーションで100行以上が返されました。
ITEMとLOCATIONはCANサブクエリ内で一意になりますが、ORDLOCテーブル/ビューはどうでしょうか?また、マテリアライズ・ヒントを使用しただけでは、マテリアライズド・ビューにはなりません。これはOracleでは非常に異なるものです。また、マテリアライズヒントはドキュメント化されていないため、バグ(このヒントで見たことがある)と異なるバージョン間で予期しない変更を行う機能が用意されていない限り、実動コードで使用しないでください。 – Boneist
ご意見ありがとうございます。マテリアライズド・ヒントを使用して、一時表をマテリアライズしました。それが何らかの有効性を持っているかどうかはわかりませんが、私は同じエフェクトへのヒントなしに試してみたと思います。 – Adil
オーソロックテーブルに関しては、ユニークなアイテム/ロケーションは保持していませんが、ユニークな「オーダーノー」を保持しています。理想的には、最新のキャンセル日のみを受け取りたいのです。 – Adil