一道有点绕的SQL题,求教

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上试了一下,好像可以。