我正在尝试解决一个问题,该问题需要我根据同一个表中其他行的值(我在输出中也需要)从表中获取行。我正在寻找与以下等效的操作:
SELECT a.id,a.col1,a.col2 FROM tbl a WHERE col1 = @col
UNION
SELECT b.id,b.col1,b.col2 FROM tbl b WHERE b.col2 IN (SELECT a.col1)
UNION
SELECT c.id,c.col1,c.col2 FROM tbl c WHERE c.col1 IN (SELECT b.col1)
或者
(SELECT id,col1,col2 FROM tbl WHERE col1 = @val) a
UNION
SELECT id,col1,col2 FROM tbl b WHERE b.col2 IN (SELECT col1 FROM a)
UNION
SELECT id,col1,col2 FROM tbl c WHERE c.col1 IN (SELECT col1 FROM b)
但这两种情况都是不允许的。是否有某种方法可以在扩展时避免繁琐的递归语句,例如下面的函数语句:
SELECT * FROM #tbl WHERE col1 = @val
UNION
SELECT * FROM #tbl WHERE col2 = (SELECT col1 FROM #tbl WHERE col1 = @val)
UNION
SELECT * FROM #tbl WHERE col1 = (SELECT col1 FROM #tbl WHERE col2 = (SELECT col1 FROM #tbl WHERE col1 = @val))