none
SQL Query - JOIN Problem RRS feed

  • 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
    Dienstag, 20. Juli 2010 13:46

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
    Dienstag, 20. Juli 2010 14:02

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
    Dienstag, 20. Juli 2010 14:02
  • 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
    Dienstag, 20. Juli 2010 15:12
  • Habs =)

     

    LEFT

     

    JOIN SPSUserClassBase usercb ON cost.IDNumber = REVERSE(SUBSTRING(REVERSE(usercb.IDNumber), 1, LEN(cost.IDNumber)))

    +
    *Danke


    www.consulting4it.de
    Dienstag, 20. Juli 2010 15:23
  • 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
    Mittwoch, 21. Juli 2010 04:01