Sql Oracle从多个源加载目标列
如何通过读取或比较来自两个不同源列的数据来加载目标表列。我有两个不同的来源,来源1和来源2的列名状态也都有员工id作为主键。我想用源1中的数据加载目标列,如果源1列中的数据不可用,那么我应该从源2加载它。有没有一种方法可以通过plsql实现这一点 例如: 目标表emp emp id name status 1 Mike A 2 John B 3 Kelly C emp id名称状态 1迈克A 约翰B 3凯利C 有什么想法吗 类似于:Sql Oracle从多个源加载目标列,sql,oracle11g,Sql,Oracle11g,如何通过读取或比较来自两个不同源列的数据来加载目标表列。我有两个不同的来源,来源1和来源2的列名状态也都有员工id作为主键。我想用源1中的数据加载目标列,如果源1列中的数据不可用,那么我应该从源2加载它。有没有一种方法可以通过plsql实现这一点 例如: 目标表emp emp id name status 1 Mike A 2 John B 3 Kelly C emp id名称状态 1迈克A 约翰B 3
select e.emp_id,
e.name,
case
when s1.id is not null then s1.status
else s2.status
end as status
from emp e
left join source_1 s1 on e.emp_id = s1.id
left join source_2 s2 on e.emp_id = s2.id;
比如:
select e.emp_id,
e.name,
case
when s1.id is not null then s1.status
else s2.status
end as status
from emp e
left join source_1 s1 on e.emp_id = s1.id
left join source_2 s2 on e.emp_id = s2.id;
这是一个很好的选择,但还有另一个选择-不要使用
案例
使用:
是一个不错的选择,但还有另一个选择-不要使用
案例
使用:
如果在您检查的第一个表中经常找到匹配项,那么您可能会发现这是一个有用的优化:
SELECT e.emp_id,
e.name,
coalesce(s1.status, (select s2.status
from source2 s2
where s2.emp_id = e.emp_id))
FROM emp_source e
LEFT JOIN source1 s1 ON e.emp_id = s1.emp_id;
如果找到来自source1的记录,则合并不会对source2执行select
你可以这样写:
SELECT e.emp_id,
e.name,
coalesce((select s1.status
from source1 s1
where s1.emp_id = e.emp_id),
(select s2.status
from source2 s2
where s2.emp_id = e.emp_id))
FROM emp_source e;
如果在您检查的第一个表中经常发现匹配项,则您可能会发现这是一个有用的优化:
SELECT e.emp_id,
e.name,
coalesce(s1.status, (select s2.status
from source2 s2
where s2.emp_id = e.emp_id))
FROM emp_source e
LEFT JOIN source1 s1 ON e.emp_id = s1.emp_id;
如果找到来自source1的记录,则合并不会对source2执行select
你可以这样写:
SELECT e.emp_id,
e.name,
coalesce((select s1.status
from source1 s1
where s1.emp_id = e.emp_id),
(select s2.status
from source2 s2
where s2.emp_id = e.emp_id))
FROM emp_source e;