2013-02-11 204 views
0

如何選擇顯示有貸款但沒有dda且沒有相關動作類型的custid,除非只有動作類型L的那個?尋找沒有dda關係的記錄,即使它們是聯合相關的(cfrela = J)。 如下所示,A123和B128合格,但由於與DDA帳戶有聯合關係,因此相關的A123 D行爲類型不符合資格。 L =貸款,d = DDA,S =儲蓄接近這個多個表的SQL連接

SELECT loans.custid, dda.custid, related.custid 
FROM data.lnmast lnmast 
EXCEPTION JOIN data.dda dda   
ON loans.custid = dda.custid 
JOIN data.related related 
ON loans.custid = related.custid 

LOANS  
custid(c) actype(c) 
A123   L  
B128   L  

DDA  
custid(c) actype(c) 
A125   D  

RELATED  
custid(c) actype(c) cfrela(c) 
A123   D   J 
A123   L   P 
A123   S   J 
B128   L   P 
B128   L   P 
+0

因此,爲了澄清,你是否在說,對於貸款你想要的行,無論是否有匹配的dda記錄,但所有其他類型只有當沒有匹配的dda記錄? – WarrenT 2013-02-13 12:28:12

回答

0

一種方法是用left outer join

select l.* 
from data.lnmast l left outer join 
    (select * 
     from data.dda 
     where actype <> 'L' 
    ) dda 
    on l.custid = dda.custid left outer join 
    data.related r 
    on l.custid = dda.custid 
where dda.custid is null and r.custid is null 

where條款,然後選擇不匹配的記錄,按您的邏輯。

1

如果我正確理解你的問題,你想要顯示的客戶ID不存在於DADA表中,只存在於相關的表中,並使用actype = L?

SELECT L.CustId 
FROM Loans L 
    LEFT JOIN Related R ON L.custid = R.custId AND R.actype <> 'L' 
    LEFT JOIN DDA D ON L.custid = D.custid 
WHERE d.custid IS NULL AND R.custid is NULL 

如果必須有在相關表中的記錄,再增加一個INNER JOIN:

SELECT DISTINCT L.CustId 
FROM Loans L 
    INNER JOIN Related R1 ON L.custid = R1.custId AND R1.actype = 'L' 
    LEFT JOIN Related R ON L.custid = R.custId AND R.actype <> 'L' 
    LEFT JOIN DDA D ON L.custid = D.custid 
WHERE d.custid IS NULL AND R.custid is NULL 

希望這有助於。