oracle 11g sql查询从两个表中获取数据
我有两个表ACTUAL和ESTIMATE,它们有唯一的列(sal_id、gal_id、amount、tax) 在实际表中,我有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_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())中包含列列表。听起来像是在尝试将值插入序列列。