3
我在使用Oracle 10g语法进行关联更新时遇到困难。我正在PL/SQL过程中处理此代码。Oracle关联更新
我会在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均支持这两种SQL语言,均基于标准SQL,因此在这些SQL产品之间具有高度的可移植性。 – onedaywhen