2011-08-29 54 views
2

这是很难描述的。我有两个字段的表:Col1中,与Col2中的以下数据:T-SQL:SQL从单个表中获取相互记录

Col1, Col2 
    1 10 
    1 11 
    1 12 
    10 1 
    11 1 
    13 1 

在Col1中的值可以像在col2的外键值。我想查找Col1中给定值的所有行,其中Col2中的值出现在Col1中,但它的Col2值也是给定值。因此,举例来说,如果我要寻找的1 Col1中的值,下面的返回行:

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

回答

1

我想这可能就是你所想要的东西:

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

真棒。谢谢!我知道有一种在连接中使用AND的方式,但不记得如何。 – Polaris431

+0

不客气! – Lucero

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