Pra*_*ady 7 sql t-sql sql-server-2008
我试图从2个表中获取不匹配的记录
对于前者
TableA
ID Account
1 Acc1
2 Acc2
3 Acc3
TableB
Opp Accountid
Opp1 1
Opp2 2
Opp3 4
Run Code Online (Sandbox Code Playgroud)
我需要知道TableB中存在哪个但在TableA中不可用的accountid.如果有人能解释你如何处理这个查询,那将是非常棒的.
所需记录为tableB的Opp3
谢谢
Prady
Nig*_*hil 11
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
Run Code Online (Sandbox Code Playgroud)
测试一下
SELECT B.Accountid
FROM TableB AS B
LEFT
JOIN TableA AS A
ON A.ID = B.Accountid
WHERE A.ID IS NULL;
Run Code Online (Sandbox Code Playgroud)
LEFT JOIN意味着它从第一个表中获取所有行 - 如果第一个连接条件没有匹配,则表B的结果表列将为空 - 这就是它工作的原因.
小智 5
SELECT B.Accountid
FROM TableB AS B
LEFT JOIN TableA AS A ON A.ID = B.Accountid
WHERE A.ID IS NULL
Run Code Online (Sandbox Code Playgroud)