我正在尝试从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
答案 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)