Benutzer mit den meisten Antworten
SQL Query - JOIN Problem

Frage
-
Hi,
ich habe ein kleines Problem.
LEFT JOIN SPSUserClassBase usercb ON cost.IDNumber = RIGHT(usercb.IDNumber, 3) LEFT JOIN SPSUserClassBase usercb2 ON cost.IDNumber = RIGHT(usercb2.IDNumber, 4)
ich habe eine Spalte über die ich JOINen möchte, welche manchmal 3 und manchmal 4 Stellen hat.
Die usercb.IDNumber sieht also bspw. '00700640' oder '00702434' aus.
Die cost.IDNumber sieht bspw. '640' oder '2434' aus.
Hat jemand eine Idee, wie ich die beiden in einem JOIN abgreifen kann?
www.consulting4it.de
Antworten
-
Hallo Fabian,
statt mit RIGHT könntest Du mit SubString arbeiten und dabei mit LEN die Länge der ID berücksichtigen. Bei einem solchem JOIN darfst Du aber nicht allzu viel von der Performance erwarten, ein Index kann da nicht verwendet werden.
LEFT JOIN SPSUserClassBase usercb
ON cost.IDNumber = SUBSTRING(usercb.IDNumber, 1, LEN(cost.IDNumber))
Olaf Helper ----------- * cogito ergo sum * errare humanum est * quote erat demonstrandum * Wenn ich denke, ist das ein Fehler und das beweise ich täglich http://olafhelper.over-blog.de- Als Antwort markiert FabianHenzler Dienstag, 20. Juli 2010 14:27
Alle Antworten
-
Hallo Fabian,
statt mit RIGHT könntest Du mit SubString arbeiten und dabei mit LEN die Länge der ID berücksichtigen. Bei einem solchem JOIN darfst Du aber nicht allzu viel von der Performance erwarten, ein Index kann da nicht verwendet werden.
LEFT JOIN SPSUserClassBase usercb
ON cost.IDNumber = SUBSTRING(usercb.IDNumber, 1, LEN(cost.IDNumber))
Olaf Helper ----------- * cogito ergo sum * errare humanum est * quote erat demonstrandum * Wenn ich denke, ist das ein Fehler und das beweise ich täglich http://olafhelper.over-blog.de- Als Antwort markiert FabianHenzler Dienstag, 20. Juli 2010 14:27
-
Hallo Olaf,
hatte mich zunächst gefreut...leider führte die Abfrage nicht zum gewünschten Erfolg =(
Leider schneidet er rechts ab und nicht links...Kann SUBSTRING auch von links anfangen und die anzahl der zeichen matchen?
Also bei usercb.IDNumber=0700456 und cost.IDNumber=456 soll natürlich 456 ausgegeben werden und nicht 070
Geht das auch?
Liebe Grüße und Danke vorab
Fabian
www.consulting4it.de -
Hallo Fabian,
sorry, diese Hitze. Rechts ist natürlich da, wo der Daumen links ist, irgendwann lerne ich es noch ;-)
Alternative ginge es auch so, musst Du mal austesten, was performanter ist:
LEFT JOIN SPSUserClassBase usercb
ON cost.IDNumber = SUBSTRING(usercb.IDNumber
,LEN(usercb.IDNumber) - LEN(cost.IDNumber) + 1
,LEN(cost.IDNumber))
Olaf Helper ----------- * cogito ergo sum * errare humanum est * quote erat demonstrandum * Wenn ich denke, ist das ein Fehler und das beweise ich täglich http://olafhelper.over-blog.de