SAS-SQL Non-Equi Join - PullRequest
       11

SAS-SQL Non-Equi Join

0 голосов
/ 05 ноября 2019

У меня есть две таблицы. Когда я присоединяюсь к ним, используя левое соединение на столе, где один ключ совпадает, а другой ключ не совпадает, я все равно получаю левое соединение, но там, где два не совпадают, я получаю дубликаты.

data Onl;
input an ssn;
datalines;
1  1
2  1
3  1
4  2
5  2
6  2
10 6
11 7
12 8
;
run;

data Off;
input an ssn;
datalines;
1 1
2 1
4 2
5 2
7 3
8 4
9 5
;
run;

proc sql;
create table test as
select
        Onl.*
from
Onl
left join Off
on Onl.ssn = Off.ssn
and Onl.an ne Off.an
;
quit;

Каково поведение SQL для ne условий? Я ожидаю, что финальный стол будет состоять из var ssn, где var an не совпадают. Пример ожидаемого результата будет:

an ssn
3  1
6  2
10 6
11 7
12 8

Ответы [ 2 ]

1 голос
/ 05 ноября 2019

proc sql правильно обрабатывает запрос. A left join возвращает все строки в первой таблице, независимо от того, есть ли совпадение во второй таблице.

Если вы хотите несовпадающие строки, я бы порекомендовал not exists:

select Onl.*
from Onl
where not exists (select 1
                  from off
                  where Onl.ssn = Off.ssn and
                        Onl.an = Off.an
                 );

Вы можете использовать join с условием where для проверки на несоответствия:

select Onl.*
from Onl left join
     Off
     on Onl.ssn = Off.ssn and Onl.an = Off.an
where off.ssn is null;
0 голосов
/ 05 ноября 2019

Оператор NE оценивается так же, как любой другой оператор. Таким образом, ваш запрос говорит, что вы хотите сопоставить наблюдения, где SSN одинаков, а AN не совпадает. Таким образом, SSN = 1 и AN = 3 будут соответствовать двум наблюдениям, которые имеют SSN = 1, но не имеют AN = 3. Таким образом, одно наблюдение будет выведено дважды, поскольку оно совпадает с двумя наблюдениями. LEFT JOIN означает, что даже когда нет наблюдений, где SSN совпадает, а AN не совпадает, тогда это наблюдение также выводится.

Возможно, вы просто хотите использовать операцию набора EXCEPT?

select ssn,an from ONL
except 
select ssn,an form OFF
...