Tsql T-SQL:从单个表中获取相互记录的SQL

Tsql T-SQL:从单个表中获取相互记录的SQL,tsql,Tsql,这有点难以描述。我有一个包含两个字段的表:Col1、Col2,其中包含以下数据: Col1, Col2 1 10 1 11 1 12 10 1 11 1 13 1 Col1中的值可以充当Col2中的外键值。我想找到Col1中给定值的所有行,其中Col2中的值出现在Col1中,但它的Col2值也是给定值。例如,如果我在Col1中查找值1,则返回以下行: Col1, Col2 1 10 1 11 10 1 11

这有点难以描述。我有一个包含两个字段的表:Col1、Col2,其中包含以下数据:

Col1, Col2
  1    10
  1    11
  1    12
  10   1
  11   1
  13   1
Col1中的值可以充当Col2中的外键值。我想找到Col1中给定值的所有行,其中Col2中的值出现在Col1中,但它的Col2值也是给定值。例如,如果我在Col1中查找值1,则返回以下行:

Col1, Col2
  1    10
  1    11
  10   1
  11   1
Col1设置为13的行不会返回,因为它不会出现在Col1设置为1的Col2中

我创建的sql有效:

Select T1.*
From Table1 T1
Inner Join Table1 T2 On T1.Col2 = T2.Col1
Where (Exists(Select * From Table1 T3 Where (T2.Col1 = T3.Col1) And (T3.Col2 = T1.Col1)))
And (T1.Col1 = 1)

这将返回重复的行。我总是可以添加DISTINCT关键字,这将删除重复项。我的问题是,我的sql是否真的是选择记录的正确方法,是否可以在不使用DISTINCT关键字的情况下进行选择。

我认为这可能会满足您的要求:

SELECT T1.*
FROM Table1 T1
JOIN Table1 T2 ON (T1.Col2 = T2.Col1) AND (T1.Col1 = T2.Col2)
WHERE T1.Col1 = 1

我想你可以放弃
加入
,直接使用
存在

SELECT  T1.*
FROM    Table1 T1
WHERE   1 IN ( T1.Col1, T1.Col2 )
        AND ( EXISTS ( SELECT   *
                       FROM     Table1 T2
                       WHERE    ( T2.Col1 = T1.Col2
                                  AND T2.Col2 = T1.Col1
                                ) ) )

令人惊叹的。非常感谢。我知道有一种方法可以在连接中使用AND,但不记得是如何使用的。