这有点难以描述。我有一个包含两个字段的表: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关键字的情况下完成。
答案 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
) ) )