Pregunta

Tengo dos mesas con múltiples columnas.Ahora quiero fusionarlos usando como operator. Mi código es como seguir

proc sql;

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

;
quit;

Estoy recibiendo mensajes de ruptura de página y no se devuelve ningún resultado. Los tipos de columnas para A.ZIP_C son char y la longitud es de 50 mientras que para B.zip_extract su carbón con longitud 6.

¿Fue útil?

Solución

fusionando en like no es una gran idea;No usa los índices y no usa muchas de las optimizaciones que lo obtiene.Sin embargo, a veces es necesario.

En SAS, sin embargo, haría esto diferente [y en la mayoría de los otros 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;

Eso logra lo mismo que el gusto, pero es más probable que permita que SAS use índices y optimizaciones, y está escrito más claramente.

Para tratar con posibles problemas de longitud de columna, 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;

Otros consejos

El problema es que está coincidiendo en la cadena, b.zip_extract, no la columna.

intento:

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

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top