我想知道如何在Oracle SQL中编写此查询:
UPDATE address
SET phone1 = sp.phone,
is_avlbl = ( CASE
WHEN sp.name IS NULL THEN 1
ELSE 0
END )
FROM address ad
LEFT JOIN speaker sp
ON sp.addressid = ad.id
上述查询格式来自MS SQL Server,但我希望与Oracle实现类似的功能。
已经看到Update and left outer join statements,这是针对T-SQL的。
修改
我尝试过以下解决方案:
update
table1 t1
set
(
t1.column1,
t1.column2,
t1.column3
) = (
select
t2.column1,
t2.column2,
( CASE
WHEN t2.column2 IS NULL THEN 1
ELSE 0
END )
from
table2 t2
where
t2.column1 = t1.column1
);
但问题是当t2中没有对应于t1的记录时,上面的sql将空值插入到t1中,因为当没有这样的记录时我需要插入其他值。如果这部分要求不清楚,我道歉。
答案 0 :(得分:1)
这样的事情可能是:
merge into address
using
(
SELECT ad.id,
sp.phone,
sp.name
FROM address ad
LEFT JOIN speaker sp ON sp.addressid = ad.id
) t on (address.id = t.id)
when matched then update
set phone1 = t.phone,
is_avlbl = case
when t.name is null then 1
else 0
end;
(这假定address.id
是主键)
虽然未经测试,但可能存在导致语法错误的拼写错误。