Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/9.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
oracle 11g sql查询从两个表中获取数据_Sql_Database_Join_Oracle11g - Fatal编程技术网

oracle 11g sql查询从两个表中获取数据

oracle 11g sql查询从两个表中获取数据,sql,database,join,oracle11g,Sql,Database,Join,Oracle11g,我有两个表ACTUAL和ESTIMATE,它们有唯一的列(sal_id、gal_id、amount、tax) 在实际表中,我有 actual_id, sal_id, gal_id, process_flag, amount, tax 1 111 222 N 100 1 2 110 223 N 200 2 estimate_id, sal_id, gal

我有两个表ACTUAL和ESTIMATE,它们有唯一的列(sal_id、gal_id、amount、tax)

在实际表中,我有

actual_id, sal_id, gal_id, process_flag, amount, tax    
1          111     222     N             100     1  
2          110     223     N             200     2
estimate_id, sal_id, gal_id, process_flag, amount, tax      
3            111     222     N             50      1  
4            123     250     N             150     2 
5            212     312     Y             10      1 
在我的估算表中

actual_id, sal_id, gal_id, process_flag, amount, tax    
1          111     222     N             100     1  
2          110     223     N             200     2
estimate_id, sal_id, gal_id, process_flag, amount, tax      
3            111     222     N             50      1  
4            123     250     N             150     2 
5            212     312     Y             10      1 
现在我想要一个最终的表,它应该有来自实际表的记录,如果sal_id+gal_id映射在实际中不存在记录,但在估算中存在,那么填充估算记录(以及金额和税款的添加)

在决赛中

id  sal_id, gal_id, actual_id, estimate_id, total   
1   111     222     1          null         101 (since record exist in actual table for 111 222)   
2   110     223     2          null         202 (since record exist in actual table for 110 223)  
3   123     250     null       4            51  (since record not exist in actual table but estimate exist for 123 250)    
(对于估算中的212 312组合,由于记录已处理,无需再次处理)

我正在使用Oracle11g。请帮助我在单个sql查询中编写逻辑

这里有一个


这里有一种方法可以做到这一点,从实际中提取所有信息,然后只提取估算中不实际的信息:

select a.*
from Actual a
union all
select e.*
from Estimate e
where not exists (select 1 from actual a where a.sal_id = e.sal_id and a.gal_id = e.gal_id) and
      e.process_flag = 'N'

如果您有大量数据,这可能不是最有效的方法。但它在较小的数据集上应该可以正常工作。

因为我需要在最后一个表中使用序号,如果我使用上述逻辑,就会得到这个错误:(ORA-02287:此处不允许序列号02287.00000-“此处不允许序列号”*原因:指定的序列号(CURRVAL或NEXTVAL)在语句中此处不合适。*操作:删除序列号。第86行的错误列:29尝试将此查询用作FROM类的子查询。
从(…上面的查询…)t中选择seq.nextval,t.*;
。它不工作Valex。获取ORA-00918:定义不明确的列00918.00000-“列定义模糊"。我认为这是由于实际表和估计表都有sal_id,gal_id列。任何其他实现方法都必须有效。您尝试运行的查询可能是您在最终结果查询中添加了一些同名列。请将您的查询添加到问题或注释中。因为我需要在最终表中使用序号,如果我使用t他在上面的逻辑中,得到了这个错误。:(ORA-02287:此处不允许序列号02287.00000-“此处不允许序列号”*原因:指定的序列号(CURRVAL或NEXTVAL)在语句中此处不合适。*操作:删除序列号。第86行错误列:29如果要将结果插入到新表中,请确保在insert语句(insert into T())中包含列列表。听起来像是在尝试将值插入序列列。