返回缺少值的行

时间:2014-07-02 16:12:23

标签: sql oracle

我有一个包含以下列的视图:

OLD_RUN_ID | NEW_RUN_ID | IND_ID | OLD_VALUE | NEW_VALUE

此视图包含NEW_RUN_ID = 260的条目,并且没有OLD_RUN_ID = 257的条目。

是否存在类似的问题:

OLD_RUN_ID | NEW_RUN_ID | IND_ID | OLD_VALUE | NEW_VALUE
257        | 260        | 1      | (null)    | 68726
257        | 260        | 2      | (null)    | 6847864

我到目前为止已尝试过:

select distinct d.* from v_audit d
full join v_audit dd on d.ind_id = dd.ind_id
WHERE d.old_run_id = 260
AND dd.new_run_id = 257;

但没有返回任何行。

1 个答案:

答案 0 :(得分:0)

也许这就是:

我们使用旧ID离开了联接,如果它不存在,则省略它。

select '257' as OLD_RUN_ID, D.New_Run_ID, D.Ind_ID, DD.Old_Value, D.new_value
from v_audit d
LEFT join v_audit dd 
  on d.ind_id = dd.ind_id
  AND dd.new_run_id = 257
WHERE d.old_run_id = 260 ;

现在,如果其中任何一个可以为null,那么......

select '257' as OLD_RUN_ID, '260' as New_Run_ID, D.Ind_ID, DD.Old_Value, D.new_value
from v_audit d
FULL OUTER join v_audit dd 
  on d.ind_id = dd.ind_id
  AND dd.new_run_id = 257
  and d.old_run_id = 260 ;

问题是在联接之后应用限制,您希望它们在联接之前发生