Tsql T-SQL:从单个表中获取相互记录的SQL
这有点难以描述。我有一个包含两个字段的表:Col1、Col2,其中包含以下数据: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
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,但不记得是如何使用的。