Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/80.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql Oracle从多个源加载目标列_Sql_Oracle11g - Fatal编程技术网

Sql Oracle从多个源加载目标列

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

如何通过读取或比较来自两个不同源列的数据来加载目标表列。我有两个不同的来源,来源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 有什么想法吗

类似于:

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;