oracle中的内连接查询

时间:2015-04-14 11:12:29

标签: oracle

**SUB_ID_DTLS:**
================
Sub_Id   Id_Val
================
497     16000123-9
495     16000123-9
489     16000281-7

**SUB_DTLS**
===========
Sub_id   TxnId
=============
499       683
498       682
497       681

**TN_DTLS**
===========
TN           TxnId
==================
9999098766  683
9999098766  682
9999098765  681

**PORT_DTLS**
=============
TxnId     Time
==============
683        04:47.3
682        03:45.4
681        05:21.4

以上四张桌子是我的桌子。我需要系统日期之间的TN。

以下是我的查询。

select A.TN,B.TXN_ID,C.ID_VAL,D.SUB_ID 
from TN_DTLS a,PORT_DTLS b,SUB_ID_DTLS c,SUB_DTLS d 
where ((A.TXN_ID=B.TXN_ID) and (B.TXN_ID=d.TXN_ID)) and  (C.SUB_ID=D.SUB_ID) and b.TIME between sysdate - 1 AND sysdate;

但是那段时间我没有得到所有TN。我需要没有ID_Val的TN。

2 个答案:

答案 0 :(得分:0)

您需要使用left join。遵循一个简单的规则:不要在from子句中使用逗号。

select A.TN, B.TXN_ID, C.ID_VAL, D.SUB_ID
from TN_DTLS a left join
     PORT_DTLS b
     on A.TXN_ID = B.TXN_ID b.TIME between sysdate - 1 AND sysdate left join
     SUB_DTLS d
     on B.TXN_ID = d.TXN_ID
     SUB_ID_DTLS c
     on C.SUB_ID = D.SUB_ID; 

这将保留a中的所有记录,即使其他表中没有任何匹配项也是如此。

答案 1 :(得分:0)

从tn_dtls中选择tn,id_value,txn_id,sub_ID在A.TXN_ID = B.TXN_ID上的连接port_dtls b在a.TXN_ID = C.TXN_ID左连接上的左连接sub_dtls c np_sub_id_dtls d在D.SUB_ID = C.SUB_ID,其中b.TIME在sysdate - 1和sysdate之间;