比如a贷款100万,找b来担保。b贷款80万找a来担保,这叫相互担保。如何写这个sql语句来查询出来结果呢?表的名字叫sc_cr_assureinfo,贷款人字段名cifname,担保人字段名assurername,合同编号字段名htbh.客户ID字段名KHID,贷款人ID字段DKRID .要求同时得显示贷款人和担保人的字段,一眼就能看出第一条记录是b给a担保,第二条记录就是a给b担保。
SELECT
cifname AS 贷款人,
assurername AS 担保人,
htbh AS 合同编号
FROM
sc_cr_assureinfo s1
WHERE
EXISTS (
SELECT 1
FROM sc_cr_assureinfo s2
WHERE s1.cifname = s2.assurername
AND s2.cifname = s1.assurername
)
注:
此SQL 只能查询互相担保的。
对于 A担保B B担保C C担保A 的, 上面的SQL无法处理。追问
cifname AS 贷款人,
assurername AS 担保人,
htbh AS 合同编号
FROM
sc_cr_assureinfo s1
WHERE
EXISTS (
SELECT 1
FROM sc_cr_assureinfo s2
WHERE s1.cifname = s2.assurername
AND s2.cifname = s1.assurername
)
注:
此SQL 只能查询互相担保的。
对于 A担保B B担保C C担保A 的, 上面的SQL无法处理。追问
A担保B B担保C C担保A 的如何写呢,谢谢!~
追答这个没有底的.
如果我简单的写
A担保B B担保C C担保A
那么还会有
A担保B B保C C担保D D担保A
后面还有
A担保B B担保C C担保D D担保E E担保F F担保G G担保A
这个情况,要用存储过程处理了。
因为用递归处理的话。一般是用来处理树型结构的。
就是要出现 递归发生环路的情况。就会发生递归过多而退出。
SQL Server 可以用 CTE 来递归。
Oracle 用 START WITH CONNECT BY
而你的情况, 就是相当于要检测一个 树型结构里面,有没有叶子节点。指向父节点。
温馨提示:答案为网友推荐,仅供参考
第1个回答 2011-07-14
select i.cifname, i.assurename
from sc_cr_assureinfo i , sc_cr_assureinfo o
where i.cifname = o.assurename and i.assurename = o.cifname ;
from sc_cr_assureinfo i , sc_cr_assureinfo o
where i.cifname = o.assurename and i.assurename = o.cifname ;