比如a贷款100万,找b来担保。b贷款80万找a来担保,这叫相互担保。如何写这个sql语句来查询出来结果呢?

比如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无法处理。追问

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 ;

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网