[MSSQL] Wybranie danych z jednej tabeli, których nie ma w dr

0

OK, jest tak, że mam dwie tabele. Dla ułatwienia powiem, że wyglądają tak(o strukturę chodzi):

employeeID    |     Date     
--------------------------
1            |   2009-01-05
--------------------------
1            |   2009-01-06
--------------------------
2            |   2009-01-04

I teraz mam dwie tabele: a i b.

Chcę wybrać te dane z tabeli b, których nie ma w tabeli a.
Niby prosta sprawa, ale zapytanie:

select distinct employeeID, date
from b
where date not in(select Date from a where employeeID = b.employeeID)

trwa ponad 20 sekund przy 13000 rekordów w tabeli b i 1000 rekordów w tabeli a.

To jest duuuużo za długo.
Oczywiście jeśli pozbędę się słowa "not", to wtedy zapytanie działa od razu, no tylko nie zwraca tego, co chcę :)

Wobec tego, jak to mogę zrobić inaczej? Żeby działo się to natychmiastowo?

0

Jaki silnik, jakie klucze, jakie indeksy?

0
/*
create table ##m1(id int not null primary key, imie varchar(20) not null )
insert into ##m1 select 1, 'Marcin' union select 2, 'Kajetan' union select 3, 'Tamara'

create table ##m2(id int not null primary key, imie varchar(20) not null )
insert into ##m2 select 1, 'Marcin' union select 4, 'Kalasanty' union select 3, 'Tamara'
*/
select * from ##m1 full join ##m2 on ##m1.id=##m2.id where ##m1.id + ##m2.id is null

Ten przykład aż za dużo robi...

pozdrawiaMM

0

Inny przykład z innym warunkiem i innym złączeniem.

select t1.* 
from tab1 t1
left join tab2 t2 on t1.id = t2.id
where t2.id is null;
0

THX! Musiałem zmienić warunki joina, ale wydaje się działać :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1