Sql Query有助于从两个表中获取不匹配的记录

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)

测试一下


Dav*_*lls 6

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的结果表列将为空 - 这就是它工作的原因.

  • OUTER是标准但可选的关键字. (4认同)
  • 自2000年以来,OUTER已经在SQL Server中被删除了.大学教授仍然喜欢它,但SQL Server查询优化器意味着不再需要OUTER,INNER和RIGHT关键字.JOIN表示INNER,LEFT JOIN表示OUTER. (4认同)

小智 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)