我有两张表格如下:
表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。
答案 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)
这可能有用......