Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] INNER JOIN mit concat in mySQL

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • [Erledigt] INNER JOIN mit concat in mySQL

    Hallo zusammen,
    In einer tabelle "user" befindet sich ein Spalte "orgid".Die "orgid" Werte sind als String wie folgt eingetragen.
    12121212-3434-1.
    Die Zeichenfolgen sind wie folgt definiert.
    1-8 = Abteilungsnummer,
    10-13 = Bereichsnummer,
    15 = Gruppennummer.
    Es gibt drei Organisationstabellen ( Abteilung, Bereich, Gruppe)
    Die o. a. Zeichenfolgen sind identisch mit den Identifikationsnummern in den OrgTabellen. In diesen stehen zusätzliche Informationen wie z.B. Bezeichnung, Adresse ect.

    Zu jedem eingetragenen User ergibt sich somit eine Zuordnung zu den verschiedenen Bereichen.

    Jetzt möchte ich einen Abfrage erstellen die zu jeden "User" die entsprechende Abteilung, Bereich auflistet.

    Zu diesem Zweck habe ich in der Anweisung den String mittels CONCAT aufgeschlüsselt in str1 und str2.
    und möchte diese in die INNER JOIN der entsprechenden Tabellen aufnehmen.

    Hier der Code:
    Code:
    SELECT `staffno`, `surname`, `orgid`, CONCAT(SUBSTRING(LOWER(TRIM(orgid)),1,9)) as `Str1`, CONCAT(SUBSTRING(LOWER(TRIM(orgid)),11,4)) as `Str2` 
    FROM `user`
    INNER JOIN `unita` ON unita.unitaid = Str1
    INNER JOIN `unitb` ON unitb.unitbid = Str2
    WHERE `staffno` != 0
    ORDER BY `staffno` asc
    ... leider funktioniert das nicht
    Vielleicht hat jmd nen Tipp für mich.

    MySQL Fehlermeldung:
    #1054 - Unknown column 'Str1' in 'on clause'
    Gruß
    Heavy-Dee

  • #2
    Bei einem JOIN kannst du nicht auf den Alias Wert zugreifen, der Wert wird erst nach dem JOIN und nach der WHERE Klausel bestimmt. Ansonsten müsste die Datenbank den Ausdruck für sämtliche möglich Kombination ausführen, was aber bei 99,9% aller Queries totaler Käse wäre. Wenn du mit damit joinen willst musst du den Ausdruck 1:1 in den Join-Bedingung übernhemen.
    Die eigentliche Lösung für solche Problem ist Normalisierung. Die erste Normalform besagt das Werte atomar gespeichert werden müssen/sollen. Das heißt wenn in orgid 3 Informationen gespeichert, die für die Anwendung relevant sind, dann brauchst du 3 Spalten.

    PS: CONCAT steht für concatenate und das heißt zusammenfügen und nicht teilen.

    Kommentar


    • #3
      Alles klar.
      Danke
      Gruß
      Heavy-Dee

      Kommentar

      Lädt...
      X