与Table2连接时获取值不在Table1中

时间:2015-10-28 05:39:38

标签: sql-server

我有两张表格如下:

表1:

Col1    Col2
834       2
834       3
834       5
877       1
877       2
877       5
900      10
900       2 
900       3

表2:

   Col3
    1
    10

预期输出:

Col1    Col3
834      1
834      10
877      10
900      1

这是我到目前为止所做的:

select distinct t1.Col1,A.Col3
from Table1
cross apply
(select * from Table2 left join Table1 on Col2  = Col3) A
order by t1.Col1,A.Col3

我一直在尝试使用join,cross apply和其他sql函数来获得预期的输出。任何帮助表示赞赏。

逻辑: 我想获得Table1的Col1的值,其中Col3与Table1的col2不匹配。 对于Eg:table2的Col3的值1和10不存在table1的col1的值834。因此,834有两行,一行值为1,另一行为10。

3 个答案:

答案 0 :(得分:1)

请尝试使用以下代码段。

DECLARE @Table1 TABLE( 
Col1     INT NOT NULL, 
Col2 INT NOT NULL 
); 

INSERT INTO @Table1 VALUES(834 ,      2)
INSERT INTO @Table1 VALUES(834 ,      3)
INSERT INTO @Table1 VALUES(834 ,      5)
INSERT INTO @Table1 VALUES(877  ,     1)
INSERT INTO @Table1 VALUES(877 ,      2)
INSERT INTO @Table1 VALUES(877 ,      5)
INSERT INTO @Table1 VALUES(900 ,     10)
INSERT INTO @Table1 VALUES(900  ,     2)
INSERT INTO @Table1 VALUES(900  ,     3)

DECLARE @Table2 TABLE( 
Col3     INT NOT NULL
); 

INSERT INTO @Table2 VALUES(1)
INSERT INTO @Table2 VALUES(10)

SELECT a.Col1,a.Col3 FROM (SELECT DISTINCT a.Col1,b.Col3 FROM @Table1 a,@Table2 b
WHERE a.Col2 <> b.Col3) a
LEFT JOIN @Table1 c on a.Col1 = c.Col1 and a.Col3 = c.Col2
WHERE c.Col1 is null

答案 1 :(得分:0)

我怀疑你需要加入这里。您要从table1中选择的所有内容都是table2中具有匹配值的行。像这样:

Select distinct col1, col2 from table1
Where col2 not in (select col3 from table2)

答案 2 :(得分:0)

select a.col1, a.col2  
from Table1 a  
where not exists(select * from Table2 b where a.col1 = b.col3)

这可能有用......