1
SELECT in_ev.type, pl.name, in_ev.year
FROM places pl INNER JOIN (SELECT e.type, e.place_id, e.year
FROM events e)in_ev ON in_ev.place_id=pl.place_id
WHERE EXISTS (SELECT 1 FROM in_ev sub_ev WHERE sub_ev.year=1994)
我想了解如何處理內聯視圖,以及爲什麼我們不能將它們用作where子句子查詢中的「源表」。當我嘗試運行此查詢時,我得到ORA-00942:表或視圖不存在內聯視圖限制
上面的代碼僅用於說明的原因。
普通表和內聯視圖之間存儲和處理的確切區別是什麼?
要添加到Alex的解釋中,並進一步回答有關評估和存儲的問題:當Optimizer看到因式分解子查詢(WITH子句中的「視圖」)時,可以自由考慮兩個選項並選擇它認爲的那個效率更高。一種是將它視爲內聯視圖(在FROM和WHERE子句中就地評估它);或者,它可以將其視爲臨時全局表,只計算一次,保存並使用它,就像它可能使用存儲的表一樣,在查詢的其餘部分使用它。 CBO將選擇哪個選項取決於幾件事情。 – mathguy