从外部联接

时间:2016-05-10 11:56:15

标签: oracle

我正在尝试从表中提取行以获取事件的开始和结束时间,这些行保存在一对多表关系中,以便对于主表中的每个instanceid,您可以拥有一个数字在孩子身上entryid。我已成功编写以下查询,提取转换纪元时间戳所需的数据,但获取的值为NULL值。我可以看到,要排除这些,我只需要从状态值反映1或6的table_a中选择行,但我不确定实现此目的的语法,我尝试过下面粗体突出显示的组合无效

SELECT a.summary
      to_char(date '1970-01-01' + b.create_date/86400, 'DD Mon YYYY HH24:MI:SS') as start_date, 
      to_char(date '1970-01-01' + c.create_date/86400, 'DD Mon YYYY HH24:MI:SS') as completed_date,
      to_char (TRUNC (SYSDATE) + NUMTODSINTERVAL ((c.create_date - b.create_date), 'second'), 'hh24:mi:ss') as Elapse_Time,
     a.status
FROM o2_hpov_casecreation a
LEFT OUTER JOIN o2_hpov_casecreation_audit b
    ON (a.instanceid = c.entryid
       AND B.action= 'Queueing Simulation phase on SYS:Action')
LEFT OUTER JOIN o2_hpov_casecreation_audit c
    ON  (a.instanceid = c.entryid
        AND c.action = 'Notifications completed')
    AND a.status IN (2,6)

1 个答案:

答案 0 :(得分:1)

您需要将过滤条件添加到 where 子句

下面的

是您查询的更正版本

SELECT a.summary
      to_char(date '1970-01-01' + b.create_date/86400, 'DD Mon YYYY HH24:MI:SS') as start_date, 
      to_char(date '1970-01-01' + c.create_date/86400, 'DD Mon YYYY HH24:MI:SS') as completed_date,
      to_char (TRUNC (SYSDATE) + NUMTODSINTERVAL ((c.create_date - b.create_date), 'second'), 'hh24:mi:ss') as Elapse_Time,
     a.status
FROM o2_hpov_casecreation a
LEFT OUTER JOIN o2_hpov_casecreation_audit b
    ON (a.instanceid = c.entryid
       AND B.action= 'Queueing Simulation phase on SYS:Action')
LEFT OUTER JOIN o2_hpov_casecreation_audit c
    ON  (a.instanceid = c.entryid
        AND c.action = 'Notifications completed')
WHERE a.status IN (2,6)