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

时间:2011-04-30 07:10:40

标签: sql tsql sql-server-2008

我正在尝试从2个表中获取不匹配的记录

前者

TableA
 ID           Account
 1               Acc1
 2               Acc2
 3               Acc3

 TableB
 Opp          Accountid
 Opp1            1
 Opp2            2
 Opp3            4

我需要知道TableB中存在哪种但在TableA中不可用的accountid。如果有人能够解释你如何处理这个查询,那将是非常棒的。

所需记录为tableB的Opp3

由于

Prady

5 个答案:

答案 0 :(得分:10)

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 

测试这个

答案 1 :(得分:5)

SELECT B.Accountid 
  FROM TableB AS B 
  LEFT 
  JOIN TableA AS A 
    ON A.ID = B.Accountid 
 WHERE A.ID IS NULL;

LEFT JOIN意味着它占用第一个表中的所有行 - 如果第一个连接条件没有匹配,则表B的结果表列将为空 - 这就是它工作的原因。

答案 2 :(得分:3)

SELECT B.Accountid
FROM TableB AS B 
LEFT JOIN TableA AS A ON A.ID = B.Accountid 
WHERE A.ID IS NULL

答案 3 :(得分:2)

试试这个

(select * from t1
except 
select * from t2)

union

(select * from t2
except 
select * from t1)

认为两个表中的列数相同

上面提到的查询从#two中选择ID,从#one中选择ID 将仅从#two给出不匹配的行。它会忽略#one

的那个

答案 4 :(得分:0)

这将产生相同的结果。

select * from TableB where Accountid not in (select ID from TableA)