/ /代替SQLクエリ - sql、oracle

代替更新SQLクエリ - sql、oracle

私はこのクエリの代替を探しています。 私はそのようなクエリがOracleで無効な識別子に終わることを知っています。だから別のテーブルの別のフィールドから1つのフィールドを更新するための同じクエリを私に与えてください。

update RBT_CMP_RECOM_9304
set FIRST_RECOM_NAME=(select rbt_cmp_base_code.RBT_NAME
from rbt_cmp_base_code
where rbt_cmp_base_code.RBT_CODE=RBT_CMP_RECOM_9304.FIRST_RECOM)
where rbt_cmp_base_code.RBT_CODE=RBT_CMP_RECOM_9304.FIRST_RECOM;

参考:

RBT_CMP_RECOM_9304=(firt_recom,first_recom_name)

RBT_CMP_BASE_CODE = (rbt_code, rbt_name)

私は試してみるとこのエラーが出ます:

ORA-00904:RBT_CMP_BASE_CODE.RBT_CODE:無効な識別子です。

よろしく。

回答:

回答№1の場合は3

1つの方法は、サブクエリを繰り返すことです。

update RBT_CMP_RECOM_9304 r
set FIRST_RECOM_NAME = (select bc.RBT_NAME
from rbt_cmp_base_code bc
where bc.RBT_CODE = r.FIRST_RECOM
)
where exists (select 1
from rbt_cmp_base_code bc
where bc.RBT_CODE = r.FIRST_RECOM
);

編集:

複数のエラーが発生した場合行が返されたら、どの値を決定する必要があります。あなたのコードの中には、これが問題かもしれないことが示唆されているわけではありません(ヒント:サンプルデータと望ましい結果が常に質問に役立ちます)。

最も簡単な解決法は、集約関数を使用することです。

update RBT_CMP_RECOM_9304 r
set FIRST_RECOM_NAME = (select max(bc.RBT_NAME)
from rbt_cmp_base_code bc
where bc.RBT_CODE = r.FIRST_RECOM
)
where exists (select 1
from rbt_cmp_base_code bc
where bc.RBT_CODE = r.FIRST_RECOM
);

しかし、あなたは rbt_cmp_base_code テーブルには重複がありません。テーブル名から、コードごとに1つの行があるように見えます。