0

このクエリを Oracle SQL に変換する必要があります。

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";

邪悪な結合があり、それが設定するのは「Null」や「解決済み」などの静的なものであり、別のクエリの一部ではありません。

いろいろやってみたのですが、うまくいきません。何か助けはありますか?

4

3 に答える 3

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')
于 2013-10-24T14:07:23.707 に答える
0

日付はdate() (つまり、現在の日付) になります。あなたが持っているものを実行しようとすると、「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 - 「キー保存されていないテーブルにマップされている列を変更できません」 *原因:非キー保存テーブルにマップする結合ビューの列を挿入または更新するために作成されました。*処置: 基礎となる実表を直接変更してください。

于 2013-10-24T12:38:51.810 に答える
0

今回のアップデートの目的を教えてください。外部結合してから、左側のテーブルを更新するのはなぜですか? これでは、結合自体の目的はほとんどありませんね。

意図したのが INNER 結合であり、結果の行のみを更新する場合、構文は次のようになります。これは、2 つのテーブル間に FOREIGN KEY によって定義された明確な関係がある場合にのみ、ジョブを実行します。子テーブルのキーの結果である親 (更新中) の単一レコード。

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" で囲むことをお勧めします (適切なエイリアスも入力してください)。

于 2013-10-23T18:31:34.433 に答える