Pergunta

Eu tenho duas tabelas com várias colunas.Agora quero mesclá-los usando como operador.Meu código é como o seguinte

proc sql;

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

;
quit;

Estou recebendo mensagens de quebra de página e nenhum resultado é retornado.Os tipos de coluna para a.zip_c são Char e o comprimento é 50, enquanto para b.zip_extract é Char com comprimento 6.

Foi útil?

Solução

Mesclando like não é uma boa ideia;ele não usa índices e não usa muitas das otimizações que você obteria.Porém, às vezes é necessário.

No SAS, porém, eu faria isso de forma diferente [e na maioria dos outros 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;

Isso realiza o mesmo que LIKE, mas é mais provável que permita que o SAS use índices e otimizações e é escrito de forma mais clara.

Para lidar com possíveis problemas de comprimento de coluna, use TRIM:

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;

Outras dicas

O problema é que você está combinando na string, b.zip_extract, não na coluna.

Tentar:

select a.*,b.*
from tera.SFTP as a,home.SFTP_1 as b
where a.zip_c like '%' || b.zip_extract || '%'
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top