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

时间:2011-08-29 08:53:46

标签: 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   1

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

我创建的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关键字的情况下完成。

2 个答案:

答案 0 :(得分:1)

我认为这可能会做你想要的:

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

答案 1 :(得分:0)

我认为您可以放弃JOIN并使用EXISTS

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
                                ) ) )