Вопрос

У меня есть две таблицы с несколькими колоннами.Теперь я хочу объединить их, используя как оператор . Мой код похож на следующий

proc sql;

    select a.*,b.*
    from tera.SFTP as a,home.SFTP_1 as b
    where a.zip_c like ('%b.zip_extract%')

;
quit;
.

Я получаю сообщения о нарушении страницы, и результат не возвращается. Типы столбцов для A.Zip_c является CHAR и длиной 50 пока для B.ZIP_EXTRACT его CHAR с длиной 6.

Это было полезно?

Решение

Слияние на like не является отличной идеей;Он не использует индексы и не использует много оптимизаций, которые вы иначе получаете.Однако иногда это необходимо.

В SAS, хотя я бы сделал это по-другому [и в большинстве других SQLS ...]

proc sql;

    select a.*,b.*
    from tera.SFTP as a,home.SFTP_1 as b
    where find(a.zip_c,b.zip_extract)
;

quit;
.

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

Чтобы справиться с возможными проблемами длины столбца, используйте отделку:

data have_a;
 length zip_c $50;
 input @1 zip_c $50.;
 datalines;
12345 99999
67890 99999
88001 99999
37013 99999
60037 99999
;;;;
run;

data have_b;
 length zip_extract $7;
 input zip_extract $;
 datalines;
12345
37013
99998
;;;;
run;

proc sql;
  title "No Rows!";
    select a.*,b.*
    from have_a as a,have_b as b
    where find(a.zip_c,b.zip_extract)
;

quit;
proc sql;
  title "Rows!";
    select a.*,b.*
    from have_a as a,have_b as b
    where find(a.zip_c,trim(b.zip_extract))
;

quit;
.

Другие советы

Проблема в том, что вы соответствуете на строке, B.zip_Extract, а не в столбце.

попробуйте:

select a.*,b.*
from tera.SFTP as a,home.SFTP_1 as b
where a.zip_c like '%' || b.zip_extract || '%'
.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top