我有一张这样的表:
table 1:
ID BankAccount
23 3343
32 4343
43 3421
table2:
EmpId Bank
23 234
23 3343
32 1321
32 4343
43 1111
43 2222
Output:
Id BankAcount Bank
43 3421 1111
43 3421 2222
我想检查是否有员工,表1中的银行账户至少不存在于表2中的一个记录中。
我写了这个:
select distinct [ID],[BankAccount],[Bank]
from table1 as tb1
inner join table 2 as tb2 ON tb2.EmpId = tb1.ID
where tb1.[BankAccount] <> tb2.[Bank]
order by [ID]
但当然它给了我&#34; 23&#34;和&#34; 32&#34; id为错误。我该如何更正支票?
感谢&#39; S
答案 0 :(得分:1)
我认为我在下面给出的查询可以作为一个起点(例如,作为更大查询的子查询,如果你也想要其他列),只要我理解你的要求:
declare @t1 table (ID int not null,BankAccount varchar(17) not null)
insert into @t1(ID,BankAccount) values
(23,'3343'),
(32,'4343')
declare @t2 table (EmpId int not null,Bank varchar(17) not null)
insert into @t2(EmpId,Bank) values
(23,'234'),
(23,'3343'),
(32,'1321'),
(32,'4343')
select
EmpId
from
@t2 t2
left join
@t1 t1
on
t2.EmpId = t1.ID and
t2.Bank = t1.BankAccount
group by EmpId
having MAX(t1.BankAccount) IS NULL
也就是说,对于t2
中的所有行,我们会尝试在t1
中找到匹配的帐户。然后,我们按EmpId
对所有内容进行分组,然后查看是否存在行 none (对于特定EmpId
值)能够进行此类匹配的情况。< / p>
答案 1 :(得分:0)
这就是你需要的
SELECT T1.ID FROM TABLE1 T1 INNER JOIN TABLE2 T2
ON T1.ID=T2.EMPID
WHERE T1.BANKACCOUNT=T2.BANK
在此处查看演示
http://sqlfiddle.com/#!6/2ceae/7
内部查询
not in
将为您提供table2中存在table1中的银行帐户的员工。现在,您可以在nextLong()
条件下使用这些记录来获得结果。