table: Table
A B 字段名
------- 数据
aa bb
ff dd
hh ff
gg hh
ii gg
oo tt
。。。。
========== 希望得到如下的查询结果,注意: A字段为ii的B字段,和另外一个记录的A字段相等。其他查出的记录,都是一样的道理。这一组查询,是以A=ii,为前提条件的。
ff dd
hh ff
gg hh
ii gg
[b]问题补充:[/b]
:) 感谢Snow_Young兄弟的回答。
我也是想不通,这里怎么用sql来做。
据说是有办法的,百思不得其解。
如果用业务的话,也很奇怪,全部取数据
要么
select t2.A, t2.B
from Table t1,Table t2
where
t1.B = t2.A
再用迭代来取,但是感觉会效率很低。
存储过程这个,我是真的不熟,呵呵,见笑了 :oops:
[code="sql"]
with result(a, b)
as (
select a, b
from t
where a = 'ii'
union all
select t.a, t.b
from result
inner join t on t.a = result.b
)
select * from result;
[/code]
你的意思是说从ii找到gg记录,然后从gg找到hh,从hh找到ff,从ff找不到记录了就停止了?
如果是这样,很遗憾的告诉你,只是一个sql搞不定,要么用业务处理,要么就得写存储过程了。
建议你
select a, b from Table where a in (select b from Table)
把有可能的数据都取出来,然后业务处理一下……希望对你有所帮助……
我存储过程不够好,不能给你提供源码了,呵呵。
你可以参照这个:
http://cyz1980.cnblogs.com/archive/2006/01/14/317380.html
比你这个复杂,你精简一下吧。
你试试这个,
with result(a, b)
as (
select a, b
from t
where a = 'ii'
union all
select t.a, t.b
from result
inner join t on t.a = result.b
)
select * from result;
在sql server上试了一下,好像可以。