0
所以我有三個表我想從以下查詢提取數據:使用多個左外連接PL/SQL
select tats.machine_interval_id as machine_interval_id,
tats.interval_type as interval_type,
tats.interval_category as interval_category,
ops.opstatemnemonic as operational_state,
nptc.categorytype as idle_category,
tats.interval_duration as interval_duration
from temp_agg_time_summary tats
left outer join operationalstates ops on ops.opstateid=tats.operationalstatenumeric
left outer join nptcategories nptc on nptc.categoryid=tats.categorytypenumeric
我遇到的問題是,每當有一個值,不是nptcategories
表中的空值,它將記錄加倍,然後輪流拋出我後來在我的包中進行的任何計算。我相信這個問題與查詢中有多個左外連接有關。我的問題可能看起來相當簡單,但我是PL/SQL的新手,請耐心等待。
我想知道的是,如何在查詢中使用多個左外部聯接而無此問題?什麼是更好的方式來構建這個查詢?
更新
好了,所以我找到了問題的代碼行是如下:
left outer join nptcategories nptc on nptc.categoryid=tats.categorytypenumeric
而且使用不同的時候,它會刪除所有的重複記錄,但會使用這會引起其他我不知道的問題?我是否應該更側重於弄清楚爲什麼上面的連接不能正常工作,或者是否足夠明顯?
具有多個外連接不應影響結果集中的行數。返回額外的行是由於不正確的連接('ON'語句,缺少某些條件),或者在WHERE子句中沒有正確的謂詞。 – Wolf
@Wolf使用明確擺脫重複記錄。但是,這會被認爲是一個適當的修復?或者我應該更多地瞭解爲什麼重複記錄是在第一個地方創建的? – James213
那麼,對於同一'categoryid',是否有多個'categorytypes'?因爲這是我能看到'DISTINCT'解決你的問題的唯一方法......如果有多個'categorytypes'返回相同的''tats'「記錄,那麼這些結果仍然會被複制...... –