2015-12-31 4 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» идентификаторов в качестве ошибки. Как я могу исправить проверку?

Thank's.

+0

Итак, для ваших данных образца вы ожидаете * нет * результатов? Могли бы вы, возможно, расширить выборку с немного большим количеством данных и некоторыми ожидаемыми результатами? –

+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 

даст вам сотрудников, где банковский счет в таблица1 существует в таблице2. Теперь вы можете использовать эти записи в состоянии 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) были в состоянии сделать такое совпадение.

Смежные вопросы