SQL Добавление предложения JOIN в представление - PullRequest
0 голосов
/ 09 января 2020

У меня есть вид -

Я не мог понять, как добавить эти два

SELECT * FROM C_OWNR.RETIRED;

Таблица вывода

ID_NO    **SHIP_NUM**       EXPIRY_DT   CREATED_BY      CREATED_DT
0903        1134        12-JAN-84       gino        07-JAN-20    
6779        1134        18-SEP-79       gino        07-JAN-20       
7784        0940        14-JAN-97       gino        07-JAN-20       
7655        0940        12-MAR-87       gino        07-JAN-20    
9787        0935        22-NOV-99       gino        07-JAN-20    
7899        0935        13-FEB-96       gino        07-JAN-20

CREATE OR REPLACE FORCE VIEW C_OWNR.V_C_FORM
(
CRUISE_ID,
SHIPNO,
ABSTRACTNO,
SEA,
DEPTH,
WATER
)
BEQUEATH DEFINER
AS
SELECT  y.cruise_id
           AS cruise_id,
        y.ship_no
           AS shipNo,
        x.abstract_no
           AS AbstractNo,
        x.sea
           AS Sea,
        y.depth
           AS Depth,
        z.qualitywater
        AS water

  FROM production_owner.ocean_current@rame.world  y

        LEFT OUTER JOIN production_owner.ocean_current_extract x ON y.ship_no = x.ship_no
        LEFT OUTER JOIN (SELECT g.*
                          FROM growth_ownr.trend_application  g
                               JOIN
                               (  SELECT MAX (go.trend_application_id)
                                             application_id,
                                         go.ship_num,
                                         go.letter_issued_date
                                    FROM growth_ownr.trend_application go
                                         JOIN
                                         (  SELECT gi.ship_num,
                                                   MAX (
                                                       gi.letter_issued_date)    latest_issued_date
                                              FROM growth_ownr.trend_application
                                                   gi
                                            WHERE     gi.application_status =
                                                       'Issued'
                                                   AND TRUNC (
                                                           gi.letter_issued_date) >=
                                                         SYSDATE
                                                       - INTERVAL '5' YEAR
                                          GROUP BY gi.ship_num) i
                                             ON     i.ship_num = go.ship_num
                                                AND i.latest_issued_date =
                                                    go.letter_issued_date
                                GROUP BY go.ship_num,
                                         go.letter_issued_date) t
                                   ON     t.ship_num = g.ship_num
                                      AND t.application_id =
                                          g.trend_application_id) z
        ON z.ship_num = y.ship_no;

Просмотр вывода

CRUISE_ID **SHIPNO**        ABSTRACTNO      SEA     DEPTH   WATER           
7604        1134        null            1       2501    1000
7079        1134        null            2       4856    3000    
7766        0940        null            3       4322    5000    
7047        0940        34              1       2344    0750
7046        0935        null            5       2343    0250
7045        0935        null            7       0010    4000

В этом представлении мы добавляем поле EXPIRY

CREATE OR REPLACE FORCE VIEW C_OWNR.V_C_FORM
(
CRUISE_ID,
SHIPNO,
ABSTRACTNO,
SEA,
DEPTH,
WATER
EXPIRY  ---------------
)
BEQUEATH DEFINER
AS
SELECT  
    y.cruise_id
       AS cruise_id,
    y.ship_no
       AS shipNo,
    x.abstract_no
       AS AbstractNo,
    x.sea
       AS Sea,
    y.depth
       AS Depth,
    z.qualitywater
    AS water,
    e.expiry_dt   --------------- 
    AS expiry       ---------------

FROM production_owner.ocean_current@rame.world  y

    LEFT OUTER JOIN production_owner.ocean_current_extract x ON y.ship_no = x.ship_no

    LEFT OUTER JOIN SELECT EXPIRY_DT FROM C_OWNR.RETIRED e NO  e.SHIP_NUM = y.shipNo 
 -----? IS THIS A CORRECT WAY TO GET THE EXPECTED OUT PUT ???????

    LEFT OUTER JOIN (SELECT g.*
                      FROM growth_ownr.trend_application  g
                           JOIN
                           (  SELECT MAX (go.trend_application_id)
                                         application_id,
                                     go.ship_num,
                                     go.letter_issued_date
                                FROM growth_ownr.trend_application go
                                     JOIN
                                     (  SELECT gi.ship_num,
                                               MAX (
                                                   gi.letter_issued_date)    latest_issued_date
                                          FROM growth_ownr.trend_application
                                               gi
                                        WHERE     gi.application_status =
                                                   'Issued'
                                               AND TRUNC (
                                                       gi.letter_issued_date) >=
                                                     SYSDATE
                                                   - INTERVAL '5' YEAR
                                      GROUP BY gi.ship_num) i
                                         ON     i.ship_num = go.ship_num
                                            AND i.latest_issued_date =
                                                go.letter_issued_date
                            GROUP BY go.ship_num,
                                     go.letter_issued_date) t
                               ON     t.ship_num = g.ship_num
                                  AND t.application_id =
                                      g.trend_application_id) z
    ON z.ship_num = y.ship_no;

для этого поля EXPIRY нам нужно получить данные от - EXPIRY_DT

SELECT EXPIRY_DT FROM C_OWNR.RETIRED;

Это мой Ожидаемый вывод VIEW

CRUISE_ID   SHIPNO      ABSTRACTNO      SEA     DEPTH   WATER       EXPIRY_DT           
7604        1134        null            1       2501    1000        12-JAN-84
7079        1134        null            2       4856    3000        18-SEP-79
7766        0940        null            3       4322    5000        14-JAN-97
7047        0940        34              1       2344    0750        12-MAR-87
7046        0935        null            5       2343    0250        22-NOV-99
7045        0935        null            7       0010    4000        13-FEB-96

Я не мог понять, как добавить эти два. Как получить ожидаемый вывод VIEW из таблицы и представления? Спасибо

...