0

別のテーブルに基づいてテーブルを更新する必要があるため、次のステートメントがあります。

update FAULTS
set FAULTS.FAULT_STATE = (
    select INCIDENTS.TICKET_STATE from INCIDENTS
    where INCIDENTS.CF_ID = FAULTS.CF_ID
)

そして、次のようなエラーが表示されます:

ORA-01427: single-row subquery returns more than one row

DISTINCT を試しましたが、状態値も異なるため、DISTINCT は機能しません。だから私もそれを変更しました:

update FAULTS
set FAULTS.FAULT_STATE = (
    select INCIDENTS.TICKET_STATE from INCIDENTS
    where INCIDENTS.CF_ID = FAULTS.CF_ID and rownum = 1
)

これでエラーは発生しなくなりました。

問題は、サブクエリが null を返す場合、行も更新してコンテンツをクリアすることです。そのための修正はありますか?

4

2 に答える 2

1

次のように、一致する行のみが更新されるようにすることができます。

update FAULTS
set FAULTS.FAULT_STATE = (
    select INCIDENTS.TICKET_STATE from INCIDENTS
    where INCIDENTS.CF_ID = FAULTS.CF_ID and rownum = 1
)
where exists (
    select INCIDENTS.TICKET_STATE from INCIDENTS
    where INCIDENTS.CF_ID = FAULTS.CF_ID
)
于 2012-11-13T22:45:05.723 に答える
0

マージ バリアント (10g+):

merge into faults
using (select cf_id, ticket_state from incidents) incidents
   on (incidents.cf_id = faults.cf_id)
when matched then update
 set fault_state=ticket_state;
于 2012-11-14T00:18:22.743 に答える