Oracle SQL查询用于提取数据并添加新创建的日期列

时间:2017-05-24 16:35:33

标签: sql oracle join

我对Oracle SQL很陌生,所以如果我的问题实际上有一个相对小学生的答案,请原谅。

所以我有2个表,Apps和Apps_history以及下面的定义。

Service Temporarily Unavailable

The server is temporarily unable to service your request due to maintenance downtime or capacity problems. Please try again later.

Apache/2.2.15 (Red Hat) Server at myapp-mydomain.rhcloud.com Port 80

Apps_history有app_id,它是Apps中主键ID的外键,应用中的记录经常更新,Apps_history会跟踪这一点。我想要一个新列来显示应用程序中的ID何时被创建,这可以从状态等于'initialized'时在Apps_History中的date_modified列中派生。

目前这就是我所拥有的

     Apps                Apps_history
     ID                  ID
     Other               APP_ID
     DATE_MODIFIED       STATUS
                         DATE_MODIFIED

但是我遇到了一些错误,非常感谢任何帮助推动我朝着正确方向前进的方法,

由于

2 个答案:

答案 0 :(得分:1)

有多种方法可以实现这一目标。你似乎已经开始了相关子查询的道路,所以继续这样:

select a.*,
       (select ah.date_modified 
        from app_history ah 
        where a.id = ah.app_id and ah.status = 'initialized')
       ) as created_date 
from apps a;

为了提高性能,我建议在app_history(app_id, status, date_modified)上建一个索引。

答案 1 :(得分:0)

您的子查询不相关。您可以使用@Gordon建议的相关查询来解决此问题。此外,如果从相关子查询中获取多行但是可修复,则会抛出错误。

我会使用左自联接。

select a.*,
    t.date_modified as create_date
from apps a
left join apps t on a.id = t.app_id
    and t.status = 'initialized';