使用3个不同表中的字段创建表

时间:2009-07-27 03:07:08

标签: sql oracle10g

我正在尝试对来自以下三个表的数据进行分组以创建新表。 account_nobmf中的acct_map字段实际上是从cmf中提取的。

字段:

bmf: account_no, trans_date
cmf: account_no, balance_due
acct_map: account_no, external_id

我在新表中想要的字段是:

external_id, account_no, balance_due

当我使用查询1而没有external_id列时,它可以正常工作并正确填充数据。但是当我尝试查询2时,它会创建一个空白表。为什么会这样?

查询1:

create table paid as
select bmf.account_no, sum(cmf.balance_due) postpaid_balance
from bmf, cmf
where to_char(bmf.trans_date, 'YYYY MM DD') = '1996 08 14' and
bmf.account_no = cmf.account_no
group by bmf.account_no

查询2:

create table paid as
select bmf.account_no, sum(cmf.balance_due) postpaid_balance, acct_map.external_id
from bmf, cmf, acct_map
where to_char(bmf.trans_date, 'YYYY MM DD') = '1996 08 14' and
bmf.account_no = cmf.account_no and
acct_map.account_no = bmf.account_no
group by bmf.account_no, acct_map.external_id

3 个答案:

答案 0 :(得分:1)

您是否尝试过首先运行您的选择查询?我猜测表acct_map中没有account_no与bmf或cmf中的account_no匹配。请检查您的查询是否正常,因此看起来像数据问题。

答案 1 :(得分:0)

这是inner join,因此我猜测查询1中没有与account_no共享acct_map的记录。

您可以使用以下查询快速测试:

select count(*)
from
    acct_map
where
    account_no in (select bmf.account_no
            from bmf, cmf
            where to_char(bmf.trans_date, 'YYYY MM DD') = '1996 08 14' and
            bmf.account_no = cmf.account_no)

答案 2 :(得分:0)

Eric是对的,但是让我补充一点......这不应该是一个视图而不是移动数据吗?