我试图从2个表SQL查询帮助从两个表中
获取非匹配记录对于前
TableA
ID Account
1 Acc1
2 Acc2
3 Acc3
TableB
Opp Accountid
Opp1 1
Opp2 2
Opp3 4
获取非匹配的记录,我需要知道哪些ACCOUNTID这是目前在表B,但在TableA中不可用。很高兴有人能解释你将如何处理这个查询。
需要的记录将tableB的的Opp3
感谢
Prady
我试图从2个表SQL查询帮助从两个表中
获取非匹配记录对于前
TableA
ID Account
1 Acc1
2 Acc2
3 Acc3
TableB
Opp Accountid
Opp1 1
Opp2 2
Opp3 4
获取非匹配的记录,我需要知道哪些ACCOUNTID这是目前在表B,但在TableA中不可用。很高兴有人能解释你将如何处理这个查询。
需要的记录将tableB的的Opp3
感谢
Prady
create table #one (id int,acc nvarchar(25))
insert into #one (id , acc) values(1,'one')
insert into #one (id , acc) values(2,'two')
insert into #one (id , acc) values(3,'three')
create table #two (acct nvarchar(25),ids int)
insert into #two (acct,ids) values('one',1)
insert into #two (acct,ids) values('two',3)
insert into #two (acct,ids) values('four',4)
select ids from #two EXCEPT select id from #one
drop table #one
drop table #two
测试这一项
SELECT B.Accountid
FROM TableB AS B
LEFT
JOIN TableA AS A
ON A.ID = B.Accountid
AND A.ID IS NULL;
LEFT JOIN意味着需要从第一个表中的所有行 - 如果有第一个加入不匹配条件,表B的结果表列将为空 - 这就是它工作的原因。
试试这个,你有两个表中提到
上面的查询选择IDS从#two只不过选择ID在相同的列数
(select * from t1
except
select * from t2)
union
(select * from t2
except
select * from t1)
思维从#one 将只从#two给你非匹配的行。它会忽略#one
我想你的意思是'左外部连接'。 – Oded 2011-04-30 07:16:44
OUTER是一个标准的,但可选的关键字。 – 2011-04-30 07:22:46
添加外连接有什么区别吗? – Prady 2011-04-30 07:23:44