多个表的SQL连接
问题描述:
如何选择显示有贷款但没有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
答
一种方法是用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
条款,然后选择不匹配的记录,按您的逻辑。
答
如果我正确理解你的问题,你想要显示的客户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
希望这有助于。
因此,为了澄清,你是否在说,对于贷款你想要的行,无论是否有匹配的dda记录,但所有其他类型只有当没有匹配的dda记录? – WarrenT 2013-02-13 12:28:12