我可以从子查询中的目标表中进行选择吗?

时间:2014-07-10 16:14:40

标签: sql database oracle

假设这是我的目的地表:

    Name | Reason for Visit | Visit Number | Visit_date
    Dan  | Foo              | 1            | 04/03/2014
    Henry| Bar              | 1            | 05/07/2014
    Dan  | Tau              | 2            | 08/10/2014

我的SOURCE表中已经有Name,Reason_For_Visit和Visit_Date,并且必须创建Visit_Number列。我是否可以像这样对仍在形成的目标表进行子查询,并获得正确的visit_number吗?

    insert into DESTINATION
    NAME,
    REASON_FOR_VISIT,
    (select count(d.Name)+1 from destination d where d.Name=Name) AS VISIT_NUMBER,
    VISIT_DATE
    from SOURCE
    ORDER BY VISIT_DATE ASC;

如果逐行插入行,我觉得我应该得到正确的Visit_number。

1 个答案:

答案 0 :(得分:3)

您的问题的答案是肯定 - 如果您插入第一行,第二个插入将看到目标表中已有的第一行。

但是,一行一行地完成这项工作是一种无效的方法。你为什么不尝试这样的事情:

insert into destination
select 
    name, 
    reason_for_visit, 
    row_number() over (partition by name order by visit_date) as visit_number,
    visit_date
from source

row_number()函数将为您正确计算visit_number,并且使用一个查询插入所有行肯定会更有效。

祝你好运!