3
相関UPDATEのOracle 10gの構文に問題があります。私はこのコードをPL/SQLプロシージャで処理しています。Oracle相関UPDATE
私はそうSQL Serverで問題にアプローチします:
UPDATE table_a a
SET a.prov_id=pn.prov_id,
a.step=1
from (
SELECT p.prov_id
FROM note n
INNER JOIN provider p ON n.author_id=p.user_id
where n.enc_id=a.enc_id
AND TRUNC(n.note_time)=a.attr_date
) pn
相当するOracleの構文は次のとおりです。
UPDATE table_a a
SET a.prov_id=(
SELECT p.prov_id
FROM note n
INNER JOIN provider p ON n.author_id=p.user_id
where n.enc_id=a.enc_id
AND TRUNC(n.note_time)=a.attr_date
),
a.step=1
WHERE EXISTS (
SELECT *
FROM note n
INNER JOIN provider p ON n.author_id=p.user_id
where n.enc_id=a.enc_id
AND TRUNC(n.note_time)=a.attr_date
)
が、これは実際には二回、サブクエリを実行していますか?これよりも簡略化された構文がありますか?
SQLキーワード「MERGE」を参照してください。これは、SQL ServerとOracleの両方でサポートされています(両方ともStandard SQLに基づいているため、これらのSQL製品間で移植性が高い)。 – onedaywhen