2015-12-31 33 views
0

我有这样的一个表:检查银行帐户中列出至少一次

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] 

但是,当然,它给了我“23”和“32”的ID为错误。我该如何纠正支票?

谢谢。

+0

因此,对于您的示例数据,您期望* no *结果?你可以用更多的数据和一些预期的结果来扩展样本吗? –

+0

这里什么是表1中的银行帐户和表2中的银行 –

+0

Mukesh - 表1和表2中的相同但不同的字段名称。 – Jordan1200

回答

0

这是你所需要的

SELECT T1.ID,T1.BANKACCOUNT,T2.BANK 
FROM TABLE1 T1 INNER JOIN TABLE2 T2 
ON T1.ID=T2.EMPID 
WHERE T1.ID NOT IN 
(
    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

内部查询

SELECT T1.ID FROM TABLE1 T1 INNER JOIN TABLE2 T2 
    ON T1.ID=T2.EMPID 
    WHERE T1.BANKACCOUNT=T2.BANK 

会给你的员工在银行账户中table1存在于table2中。现在你可以在not in条件下使用这些记录来获得你的结果。

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进行分组,然后查看我们是否有行的(对于特定的EmpId值)能够进行此类匹配的情况。