SQL Server 2008 R2:查找两列之间的链接和链



Table:

create table tbl_test
(
col1 int,
col2 int
);

记录:

INSERT INTO tbl_test 
VALUES (111, 112), (112, 113), (113, 114), (114, 111),
(115, 116), (117, 118), (118, 119), (111, 130),
(120, 121), (122, 123), (123, 111),  (124, 111);

我需要为不同的输出编写 2 个不同的查询。

查询1:在此查询中,我想col2col1

111->112->113->114->111

117->118->119

122->123-111

预期产出1:

col1    col2
-------------
111     112
112     113
113     114
114     111
117     118
118     119
122     123
123     111

尝试过:

SELECT
col1, col2
FROM 
tbl_test t
WHERE 
EXISTS (SELECT 1 
FROM tbl_test t1
WHERE t.col1 = t1.col2
OR t.col2 = t1.col1)

上面的查询返回了 2 条额外的记录,这些记录是124,111111,130不应该显示的,因为124不在 col2 中并且130没有进一步的链接。

查询2:在此查询中,我想以111->112->113->114->111的形式查找完整的链col1col2(这是完整的链,因为它以111开头,以111结尾(。

预期产出2:

col1    col2
-------------
111     112
112     113
113     114
114     111 

对于查询 1: 只需找到所有值,其中 col2 的 1 等于 col1(另一行的,不需要显示(

SELECT t1.col1, t1.col2
FROM tbl_test t1 inner join tbl_test t2
ON t1.col2 = t2.col1

Query2 更复杂,因为您希望查找具有无限数量链接条目的条目链。如果可以限制链节的数量,则可以找到第一个条目 (col1( 等于最后一个条目 (col2( 的所有成员。

例如:无链节:

SELECT t1.col1, t1.col2
FROM tbl_test t1 inner join tbl_test t2
ON t1.col2 = t2.col1   AND t2.col2 = t1.col1

一个链节(仅显示链条的起始元素(:

SELECT t1.col1, t1.col2
FROM tbl_test t1 inner join tbl_test t2 ON t1.col2 = t2.col1 
inner join tbl_test t3 ON t2.col1 = t3.col1
WHERE t3.col2 = t.col1

最新更新