检查银行帐户是否至少列出一次

时间:2015-12-31 11:42:10

标签: sql sql-server select

我有一张这样的表:

    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

2 个答案:

答案 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()条件下使用这些记录来获得结果。