Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] LEFT JOIN auf mehrere Spalten

Einklappen

Neue Werbung 2019

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

  • [Erledigt] LEFT JOIN auf mehrere Spalten

    Hallo,
    ich stehe vor dem Problem, dass zwei Tabellen mehr als jeweils eine Spalte verbindet. Es soll von der Tabelle A ausgelesen werden. Dabei soll noch Information von B hinzugezogen werden. Jedoch muss jeweils die entry_id und die user_id übereinstimmen, um die Zeile richtig einander zuordnen zu können. Bsp:

    SELECT tab_a.title
    FROM tab_a LEFT JOIN tab_b
    ON tab_a.entry_id=tab_b.entry_id, tab_a.user_id=tab_b.user_id
    WHERE ...

    Leider führt das zu einem Fehler. Mit "AND" statt dem Komma in der "ON"-Zeile erscheint kein Fehler, jedoch stimmt die Zuordnung nicht. Wie kann man das lösen?

    Grüße
    Nystagmussen


  • #2
    Hallo,

    aus dem Stegreif würde ich dir dazu raten, die Mehrfach-Bedingung in einzelne JOINs zu formulieren. Der Lexer müsste das sauber auflösen.
    Viele Grüße,
    Dr.E.

    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    1. Think about software design before you start to write code!
    2. Discuss and review it together with experts!
    3. Choose good tools (-> Adventure PHP Framework (APF))!
    4. Write clean and reusable software only!
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    Kommentar


    • #3
      Die "einfachere" Teilbedingung in die ON Bedingung stecken und die andere in die WHERE Bedingung.
      "entry_id", id heißt "eindeutig"? Dann ist das vermutlich die "einfachere" Bedingung.
      Code:
      SELECT
        tab_a.title
      FROM
        tab_a
      LEFT JOIN
        tab_b
      ON
        tab_a.entry_id=tab_b.entry_id
      WHERE
        tab_a.user_id=tab_b.user_id
        AND ...
      edit: Das sieht das MySQL Manual anders.
      MySQL :: MySQL 5.1 Reference Manual :: 12.2.7.1 JOIN Syntax
      The conditional_expr used with ON is any conditional expression of the form that can be used in a WHERE clause. Generally, you should use the ON clause for conditions that specify how to join tables, and the WHERE clause to restrict which rows you want in the result set.

      Kommentar


      • #4
        Zitat von nystagmussen Beitrag anzeigen
        Mit "AND" statt dem Komma in der "ON"-Zeile erscheint kein Fehler, jedoch stimmt die Zuordnung nicht.
        das kann nicht sein, bzw wenn das so ist, dann stimmt sonst etwas nicht. Mit der Version von David wirst du genau das gleiche Resultat erhalten. Da bei die die Attribute in beiden Tabellen gleich heissen, würde ich die USING()-Funktion vorziehen:
        PHP-Code:
        SELECT
          tab_a
        .title
        FROM
          tab_a
        LEFT JOIN
          tab_b USING
        (entry_iduser_id)
        WHERE
        ... 
        Das ändert aber am Resultat auch nichts.
        Gruss
        L

        Kommentar

        Lädt...
        X