Ankündigung

Einklappen
Keine Ankündigung bisher.

2 Joins auf die gleiche Tabelle

Einklappen

Neue Werbung 2019

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

  • 2 Joins auf die gleiche Tabelle

    Hallo,

    ich hab ein kleines Problem mit einer PNBOX die ich gerade am schreiben bin...

    Ich habe eine Tabelle PNBOX in der stehen die Felder empfaenger_id und abesender_id, nun möchte ich aus der Tabelle userdaten den entsprechenden Loginname ermitteln für den Empfänger bzw. Abesender allein ist das kein Problem nur wie ermittel ich beide Namen in einen Select ohne dabei Sub-Selects verwenden zu müssen?

    Mein bisheriger Versuch:
    Code:
    SELECT U.loginname AS empfänger, PN.* 
    FROM `userdaten` as U RIGHT JOIN `pnbox` as PN ON (U.id = PN.`empfaenger_id`) 
    WHERE U.loginname='hstev'
    Gewisse Dinge behält man besser für sich, z.B. das man gewisse Dinge für sich behält.

  • #2
    Das Ergebnis eines JOINs kannst Du Dir wieder als Tabelle vorstellen.
    D.h. ein nachgeschaltetes JOIN funktioniert genauso, wie auf eine Tabelle.

    Wenn einer Tabelle zwei unterschiedliche Referenznamen gegeben werden,z.B. `userdaten` as Uvon und `userdaten` as Uan, dann kann sie auch doppelt in zwei aufeinanderfolgenden JOINs der selben Abfrage benutzt werden.

    Kommentar


    • #3
      aber ich hätte dann 2 mal U.loginname ... so ganz verstehe ich das nicht ...

      hast du mal ein Beispiel?

      [edit]

      ich habs nun so gemacht aber das liefert mir keinen Datensatz
      Code:
      SELECT U.loginname AS empfänger, U.loginname AS absender, PN . *
      FROM `userdaten` AS U
      RIGHT JOIN `pnbox` AS PN ON ( U.id = PN.`empfaenger_id` )
      RIGHT JOIN `pnbox` ON ( U.id = PN.`absender_id` )
      WHERE U.loginname = 'hstev'
      Gewisse Dinge behält man besser für sich, z.B. das man gewisse Dinge für sich behält.

      Kommentar


      • #4
        aber ich hätte dann 2 mal U.loginname ... so ganz verstehe ich das nicht ...
        Wenn Du `userdaten` einmal Uvon und einmal Uan nennst, hast Du kein U.loginname.
        Du hast dann Uvon.loginname und Uan.loginname.
        Analog dazu Uvon.id und Uan.id.
        Und beide kannst Du getrennt in ON-Klauseln verwenden.

        Kommentar


        • #5
          ok dann muss ich noch ein Distinct mit einbauen weil ich sonst jeden Eintrag 4 mal bekomme

          [edit] mit Left Joins gehts auch ohne Distinct
          Gewisse Dinge behält man besser für sich, z.B. das man gewisse Dinge für sich behält.

          Kommentar


          • #6
            huh?
            Auch mit "normalem" JOIN geht das ohne Duplikate.
            Code:
            SELECT
            	Uvon.loginname AS von, Uan.loginname AS an, PN.*
            FROM
            	pnbox AS PN
            JOIN
            	userdaten AS Uvon ON Uvon.id=PN.absender_id
            JOIN
            	userdaten AS Uan ON Uan.id=PN.empfaenger_id
            WHERE
            	Uvon.loginname='hstev'

            Kommentar


            • #7
              ja hatte mich falsch ausgedrückt ich bin anfangs bei den JOIN's von der Tabbelle PNBOX ausgegangen (s. Beispiele oben)...deshalb hab ich doppelte Einträge bekommen.
              Gewisse Dinge behält man besser für sich, z.B. das man gewisse Dinge für sich behält.

              Kommentar

              Lädt...
              X