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
現在,當我獨自一人跑了嵌套查詢,我有幾百行少,運行整個查詢的時候會有幾個項目/地點連擊都是獨一無二的,但是重複的項目/位置返回數百行。
ITEM和LOCATION在CAN子查詢中是唯一的,但在ORDLOC表/視圖中呢?另外,僅僅因爲你使用了物化提示並不能使它成爲「物化視圖」,這在Oracle中是非常不同的事情。此外,物化提示沒有記錄,因此不應在生產代碼中使用,除非您準備好了錯誤(我已經看到這個提示),並且功能可以在不同版本之間進行意外更改。 – Boneist
感謝您的評論。正在使用物化提示來實現臨時表。不知道它是否有任何效果,因爲我相信我嘗試過,沒有提示相同的效果。 – Adil
至於ordloc表,它並不包含唯一的項目/位置,但擁有唯一的「訂單號」,理想情況下,我只想在最近的取消日期中提取。 – Adil