SQL Server 2008 R2:查找第1列中存在column2值的行

时间:2018-07-06 11:46:25

标签: sql sql-server sql-server-2008-r2

我想找到col2记录在col1中的条目。

表格:

CREATE TABLE Test_Table
(
    Col1 int,
    Col2 int
);

条目:

INSERT INTO Test_Table VALUES(111,112),
                              (112,113),
                              (114,115),
                              (116,117),
                              (117,118),
                              (118,119);

预期结果:

Col1    Col2
-------------
111     112
112     113
116     117
117     118
118     119

注意:未显示记录114,115,因为115中没有col1

我的尝试:

WITH CTE1
AS
(
    SELECT Col1, Col2
    FROM Test_Table
),
CTE2
AS
(
    SELECT t.Col1, t.Col2
    FROM Test_Table t
    INNER JOIN CTE1 s1
    ON s1.Col2 = t.Col1
    OR s1.Col2 = t.Col2
)
SELECT DISTINCT * FROM CTE2;

但是获取所有记录。

6 个答案:

答案 0 :(得分:3)

我想这就是你想要的。

select t.*
from #test_table t
where exists (select 1
              from #test_table t2
              where t2.col1 = t.col2
             )
   or exists (select 1
              from #test_table t3
              where t3.col2 = t.col1
             );

答案 1 :(得分:3)

这也可能起作用

<div *ngFor="let user of temp.filter(us => us.visibility === 'visible'); let i = index">
 <div>
    <div>{{i+1}}</div>
    <div>{{user.name}}</div>
 </div>
</div>

答案 2 :(得分:2)

我认为您只想要exists

select tt.*
from test_table tt
where exists (select 1
              from test_table tt2
              where tt2.col1 = tt.col2
             );

答案 3 :(得分:2)

使用widnowsSoftInputMode:'adjustpan'

CROSS JOIN

答案 4 :(得分:0)

根据您的评论,我怀疑您希望col1 / col2存在于另一行的col1 / col2中

select tt.*
from test_table tt
where exists (select 1
              from test_table tt2
              where   -- Ensure not same row
                    (tt2.col1 <> tt.col1 or tt2.col2 <> tt.col2)
                and -- Ensure at least one match
                    (tt2.col1 = tt.col1 or tt2.col1 = tt.col2 or tt2.col2 = tt.col1 or tt2.col2 = tt.col2)
             );

答案 5 :(得分:0)

select t1.* from Test_Table t1 left join Test_Table t2 on t2.Col1=t1.Col2 where t2.Col2 is not null
union
select t1.* from Test_Table t1 left join Test_Table t2 on t2.Col2=t1.Col1 where t2.Col1 is not null