2017-05-24 7 views
-1

Oracle SQLはかなり新しくなっていますので、私の質問には比較的少年の回答があります。データをプルして新しい作成日を追加するOracle SQLクエリー

私は2つのテーブル、AppsとApps_historyを以下の定義で持っています。

 Apps    Apps_history 
    ID     ID 
    Other    APP_ID 
    DATE_MODIFIED  STATUS 
         DATE_MODIFIED 

Apps_historyは、アプリの主キーIDの外部キーであるAPP_IDた、アプリ内のレコードは、頻繁に更新され、Apps_historyはこれを追跡します。新しい列が表示されるようにするには、アプリケーションのIDが作成されている必要があります。これは、状態が「初期化済み」の場合は、Apps_Historyのdate_modified列から取得できます。

現在、これは私が

select *, t.date_modified as create_date 
    (select app_history.date_modified 
    from apps 
    inner join app_history on 
    apps.id=app_history.app_id where 
    status='initialized') T 
    from apps; 

持っているものである。しかし、私はいくつかのエラーを取得しています、正しい方向に私を微調整するために任意のヘルプははるかに高く評価され、

おかげ

答えて

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)にインデックスをお勧めします:あなたはそれを続行するには、相関副問合せの道を開始しているように見えます。

+0

魅力的に働いた、多くのありがとうゴードン – DPEZ

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'; 
関連する問題