2013-10-23 58 views
0

我有這個查詢,我必須轉換爲Oracle SQL。Oracle SQL Update加入不使用'結果'表結果

UPDATE Active_Exclusions 
LEFT JOIN Active_Exclusions_Full ON 

Active_Exclusions.Exclude_Reason = Active_Exclusions_Full.Exclude_Reason AND 
Active_Exclusions.ViantID = Active_Exclusions_Full.ViantID 

SET Active_Exclusions.ViantID = Null, 
Active_Exclusions.Date_Resolved = Date, 
Active_Exclusions.Resolution = "Resolved" 

WHERE Active_Exclusions.ViantID Is Not Null AND 
Active_Exclusions_Full.ViantID Is Null AND 
Active_Exclusions.Exclude_Reason<>"PCP not in RSA County"; 

有一個邪惡的聯接以及它集是靜態的東西,如「空」或「已解決」,而不是另一個查詢的一部分。

我試過各種東西,不能做這項工作。任何幫助?

+0

'不能做這個工作' - 你會得到什麼錯誤?什麼不行?請詳細說明! –

回答

0

您能解釋本更新的目標是什麼嗎?你爲什麼要加入並在左邊的桌子上更新?這幾乎沒有聯合本身的目的不是嗎?

如果你想要的是一個INNER連接並只更新結果行,那麼語法如下所示:當且僅當FOREIGN KEY定義的明確關係在2表意味着在父表(有更新的)上有一條記錄,這個記錄是從子表中得到的。

UPDATE (SELECT ae.ViantID, ae.Date_Resolved, ae.Resolution 
      FROM Active_Exclusions ae, Active_Exclusions_Full aef 
     WHERE ae.Exclude_Reason = 
        aef.Exclude_Reason 
       AND ae.ViantID = Active_Exclusions_Full.ViantID 
       AND ae.ViantID IS NOT NULL 
       AND aef.ViantID IS NULL 
       AND ae.Exclude_Reason <> 
         'PCP not in RSA County') 
    SET ViantID = NULL, Date_Resolved = Date, Resolution = 'Resolved'; 

另請注意,使用名稱'Date'定義的字段將成爲問題。這是一個關鍵字,最好使用不同的名稱作爲列或至少用雙引號「Date」(如果不可能的話,也使用適當的別名)將其括起來。

+0

日期將是日期()(即當前日期) 當我嘗試運行您所擁有的內容時,它說「ViantID」不是有效的標識符。 – user2912619

0

日期將是日期()(即當前日期)當我嘗試運行您所擁有的內容時,它說「ViantID」不是有效的標識符。

(SELECT agp_mpi_prov_quality_history.viant_id, AGP_MPI_PROV_QUALITY_HISTORY.RESOLUTION1 
FROM AGP.AGP_MPI_PROV_QUALITY_HISTORY AGP_MPI_PROV_QUALITY_HISTORY, 
AGP.AGP_MPI_PROV_QUALITY_CURRENT AGP_MPI_PROV_QUALITY_CURRENT 
    WHERE AGP_MPI_PROV_QUALITY_HISTORY.Exclude_Reason = AGP_MPI_PROV_QUALITY_current.Exclude_Reason 
    AND AGP_MPI_PROV_QUALITY_HISTORY.Viant_ID = AGP_MPI_PROV_QUALITY_current.Viant_ID 
    AND AGP_MPI_PROV_QUALITY_HISTORY.Viant_ID IS NOT NULL 
    AND AGP_MPI_PROV_QUALITY_current.Viant_ID IS NULL 
    AND AGP_MPI_PROV_QUALITY_HISTORY.Exclude_Reason <> 'PCP not in RSA County') 

這工作,但是當我在

UPDATE(QUERY HERE) 
Set Viant_id = null (for ease of use just one) 

包裹它,我得到這個錯誤:QL錯誤:ORA-01779:不能修改它映射到非鍵保存表中的列 01779 。00000 - 「無法修改映射到非鍵保存表的列」 *原因:試圖插入或更新連接視圖的列,其中 映射到非鍵保留表。 *操作:直接修改底層基表。

0

好的!我發現這是有效的:

update agp_mpi_prov_quality_history 
set viant_id = null 
where exists 
    (SELECT agp_mpi_prov_quality_history.viant_id 
    FROM AGP.AGP_MPI_PROV_QUALITY_HISTORY AGP_MPI_PROV_QUALITY_HISTORY, 
    AGP.AGP_MPI_PROV_QUALITY_CURRENT AGP_MPI_PROV_QUALITY_CURRENT 
    WHERE AGP_MPI_PROV_QUALITY_HISTORY.Exclude_Reason = AGP_MPI_PROV_QUALITY_current.Exclude_Reason 
    AND AGP_MPI_PROV_QUALITY_HISTORY.Viant_ID = AGP_MPI_PROV_QUALITY_current.Viant_ID 
    AND AGP_MPI_PROV_QUALITY_HISTORY.Viant_ID IS NOT NULL 
    AND AGP_MPI_PROV_QUALITY_current.Viant_ID IS NULL 
    AND AGP_MPI_PROV_QUALITY_HISTORY.Exclude_Reason <> 'PCP not in RSA County')