MichaelR: MySQL: Left Join Frage

Hallo,

in einer SELECT-Abfrage sollen zwei Tabellen miteinander über einen LEFT JOIN kombiniert und ausgegeben werden.

Allerdings stehe ich grad vor nem Problem. In der Ausgangstabelle befindet sich ein Textfeld namens "LinkedItems" mit z. B. folgendem Inhalt 00005#00006, also letzlich zwei ID-Nummern, die über einen Hash (#) miteinander verbunden sind.

Den Left Join würde ich normalerweise so bauen:

SELECT ... FROM tab1
LEFT JOIN tab2 ON tab1.LinkedItems = tab2.Id

Das Problem ist jetzt allerdings, dass das Feld aus dem Join-Bereich eigentlich erst gesplittet werden müsste ehe es mit den Id-Werten aus tab2 verglichen und ausgegeben werden  kann.
Wie lässt sich sowas am einfachsten realisieren?
Anmerkung: das Feld LinkedItems kann auch mehrere Ids enthalten, deshalb bietet es sich nicht an, die Tabelle direkt mit mehreren separaten FEldern zu bauen.

Danke + Grüße
Michael

  1. Hallo,

    in einer SELECT-Abfrage sollen zwei Tabellen miteinander über einen LEFT JOIN kombiniert und ausgegeben werden.

    In der Ausgangstabelle befindet sich ein Textfeld namens "LinkedItems" mit z. B. folgendem Inhalt 00005#00006, also letzlich zwei ID-Nummern, die über einen Hash (#) miteinander verbunden sind.

    Das ist gar keine gute Idee.

    Wie lässt sich sowas am einfachsten realisieren?
    Anmerkung: das Feld LinkedItems kann auch mehrere Ids enthalten, deshalb bietet es sich nicht an, die Tabelle direkt mit mehreren separaten FEldern zu bauen.

    indem Du Deine Tabellenstruktur umbaust.

    Diese Problemstellung ist im Prinzip völlig üblich, sie entspricht einer 1:n-Beziehung, möglicherweise auch einer n:m-Beziehung. Das Problem löst man mit einer Beziehungstabelle, nicht mit "verketteten" IDs.

    Ich verlinke Dir dazu gerne unsere Join-Artikel:

    Freundliche Grüße

    Vinzenz

    1. Tach!

      In der Ausgangstabelle befindet sich ein Textfeld namens "LinkedItems" mit z. B. folgendem Inhalt 00005#00006, also letzlich zwei ID-Nummern, die über einen Hash (#) miteinander verbunden sind.
      Das ist gar keine gute Idee.

      Das unterstreiche ich auch ganz dick.

      Wie lässt sich sowas am einfachsten realisieren?
      Anmerkung: das Feld LinkedItems kann auch mehrere Ids enthalten, deshalb bietet es sich nicht an, die Tabelle direkt mit mehreren separaten FEldern zu bauen.
      indem Du Deine Tabellenstruktur umbaust.

      Eine "Lösung" ohne Umbau wäre, in der Verknüpfungsbedingung eine Stringoperation unterzubringen, die genau den gewünschten Teil liefert. Aber das ist alles andere als eine gute Idee, denn diese Stringoperation muss auf sämtliche Zeilen angewendet werden. Das kostet Rechenzeit und ein geschwindigkeitsbringender Index kann auch nicht verwendet werden.

      dedlfix.

  2. Anmerkung: das Feld LinkedItems kann auch mehrere Ids enthalten, deshalb bietet es sich nicht an, die Tabelle direkt mit mehreren separaten FEldern zu bauen.

    Hi,

    liest sich eigentlich nach typischem Fall für eine weitere Normalisierung. Geht das noch oder hängt da inzwischen zuviel Codesalat dran?

    Gruß, Silvester