Domanda

Ho due tavoli con più colonne.Ora voglio unirli usando un operatore come . Il mio codice è come il seguente

proc sql;

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

;
quit;
.

Sto ricevendo messaggi di interruzione della pagina e non viene restituito alcun risultato. I tipi di colonna per A.ZIP_C è Char e Lunghezza è 50 mentre per B.zip_extract è il suo char con lunghezza 6.

È stato utile?

Soluzione

La fusione su like non è una grande idea;Non usa gli indici e non utilizza molte delle ottimizzazioni che diventi ottenuto.Tuttavia, a volte è necessario.

In SAS, però, lo farei diversamente [e nella maggior parte degli altri SQL ...]

proc sql;

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

quit;
.

che realizza la stessa cosa del tipo, ma è più probabile che permettere a consentire SAS di utilizzare indici e ottimizzazioni ed è scritta più chiaramente.

Per affrontare possibili problemi di lunghezza della colonna, utilizzare 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;
.

Altri suggerimenti

Il problema è che si sta corrispondendo sulla stringa, B.zip_extract, non la colonna.

Prova:

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

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top