Нещо пак не разбрах, ето един експеримент:
create table __at1 (id int, f1 int, f2 int)
create table __at2 (id int, f1 int, f2 int)
insert into __at1 values (1, 1, 1)
insert into __at1 values (2, 1, 2)
insert into __at1 values (3, 1, 3)
insert into __at1 values (4, 2, 1)
insert into __at1 values (5, 2, 2)
insert into __at1 values (6, 2, 3)
insert into __at1 values (7, 3, 1)
insert into __at1 values (8, 3, 2)
insert into __at1 values (9, 3, 3)
insert into __at2 values (11, 1, 1)
insert into __at2 values (12, 1, 2)
insert into __at2 values (13, 1, 4)
insert into __at2 values (14, 2, 1)
insert into __at2 values (15, 2, 2)
insert into __at2 values (16, 2, 4)
insert into __at2 values (17, 4, 1)
insert into __at2 values (18, 4, 2)
insert into __at2 values (19, 4, 4)
select __at1.id, __at1.f1, __at1.f2
from __at1
left join __at2 on (__at1.f1 = __at2.f1 and __at1.f2 = __at2.f2)
where __at2.f1 is null and __at2.f2 is null
Има дублиращи се по f1, по f2, както и по двете.
Резултатът, както може да се очаква, е:
id f1 f2
----------- ----------- -----------
3 1 3
6 2 3
7 3 1
8 3 2
9 3 3
(5 row(s) affected)
Сега, ако изпълня същата заявка, но със сменено условие:
select __at1.id, __at1.f1, __at1.f2
from __at1
left join __at2 on (__at1.f1 = __at2.f1 and __at1.f2 = __at2.f2)
where __at2.f1 is null and __at2.f2 is not null
Резултатът, както може да се очаква, е:
id f1 f2
----------- ----------- -----------
(0 row(s) affected)
Не съм много сигурен как може да се получи резултат във втория случай.
Но както и да е, щом проблема е вече решен...
Редактирано от Formal на 14.02.08 15:00.
|