Frage

Ich habe zwei Tabellen mit mehreren Spalten.Jetzt möchte ich sie zusammenführen mit wie Betreiber.Mein Code ist wie folgt

proc sql;

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

;
quit;

Ich erhalte Seitenumbruchmeldungen und es wird kein Ergebnis zurückgegeben.Die Spaltentypen für a.zip_c sind Zeichen und die Länge ist 50, während für b.zip_extract sein Zeichen mit der Länge 6 .

War es hilfreich?

Lösung

Zusammenführen auf like ist keine gute Idee;es verwendet keine Indizes und verwendet nicht viele der Optimierungen, die Sie sonst erhalten.Manchmal ist es jedoch notwendig.

In SAS würde ich das jedoch anders machen [und in den meisten anderen 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;

Dies bewirkt dasselbe wie LIKE, ermöglicht es SAS jedoch eher, Indizes und Optimierungen zu verwenden, und ist klarer geschrieben.

Verwenden Sie TRIM, um mögliche Probleme mit der Spaltenlänge zu beheben:

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;

Andere Tipps

Das Problem ist, dass Sie auf der Zeichenfolge, b.zip_extract, nicht der Spalte, passen.

Versuchen Sie:

generasacodicetagpre.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top