3 Tabellen mit LEFT JOIN und Bedingung auslesen

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

  • 3 Tabellen mit LEFT JOIN und Bedingung auslesen

    Hallo,
    ich habe 3 Tabellen:
    isttabelle hat Spalten: artikel_id, name, preis
    ignotabelle hat Spalten: artikel_id
    fehltabelle hat Spalten: artikel_id

    primerkey ist bei allen 3 tabellen artikel_id

    Nun möchte ich ein Select der Tabelle "isttabelle" aber es sollen nur Einträge ausgegeben werden wenn "ignotabelle" und "fehltabelle" nicht die artikel_id von "isttabelle" beinhaltet

    mein Ansatz:
    "SELECT artikel_id, name, preis FROM isttabelle LEFT JOIN ignotabelle ON isttabelle.artikel_id != ignotabelle.artikel_id LEFT JOIN fehltabelle ON isttabelle.artikel_id != fehltabelle.artikel_id"

    Leider funktioniert mein Query nicht und mit solchen Verschachtelungen kenne ich mich leider nicht so aus.

    Kann mir da bitte mal einer unter die Arme greifen?

    Besten Dank

  • #2
    Re: 3 Tabellen mit LEFT JOIN und Bedingung auslesen

    SELECT artikel_id, name, preis FROM isttabelle
    LEFT JOIN ignotabelle ON isttabelle.artikel_id = ignotabelle.artikel_id AND ignoretabelle.artikel_id IS NULL
    LEFT JOIN fehltabelle ON isttabelle.artikel_id = fehltabelle.artikel_id AND fehltabelle.artikel_id IS NULL

    Ein netter Guide zum übersichtlichen Schreiben von PHP/MySQL-Code!

    bei Klammersetzung bevorzuge ich jedoch die JavaCoding-Standards
    Wie man Fragen richtig stellt

    Kommentar


    • #3
      Danke für die Hilfe,
      leider war noch ein Fehler drin. Ich mußte die Spalten im SELECT mit Tabelle schreiben, da sonst ein Fehler kam. Also:

      SELECT isttabelle.artikel_id, isttabelle.name, isttabelle.preis FROM isttabelle


      Nun läuft es zwar ohne Fehlermeldung durch aber es werden immer noch alle Zeilen von "isttabelle" angezeigt, obwohl z.B. in der "ignotabelle" gleiche Einträge in der artikel_id sind.

      Ich nehme an das es was mit der Definition der Spalten in der z.B. "ignotabelle" zu tun hat. Dort muß ja glaube NOT NULL definiert sein.

      CREATE TABLE `ignotabelle` (
      `artikel_id` varchar(15) NOT NULL default '',
      `date_added` datetime NOT NULL default '0000-00-00 00:00:00',
      PRIMARY KEY (`artikelnr_id`)
      ) ENGINE=MyISAM DEFAULT CHARSET=latin1;

      Müsste doch so stimmen oder?
      Hat da jemand noch eine Idee was hier nicht stimmt?

      Kommentar


      • #4
        Re: Re: 3 Tabellen mit LEFT JOIN und Bedingung auslesen

        Original geschrieben von ghostgambler
        SELECT artikel_id, name, preis FROM isttabelle
        LEFT JOIN ignotabelle ON isttabelle.artikel_id = ignotabelle.artikel_id AND ignoretabelle.artikel_id IS NULL
        LEFT JOIN fehltabelle ON isttabelle.artikel_id = fehltabelle.artikel_id AND fehltabelle.artikel_id IS NULL
        IS NULL in ON-Klausel ist fatal, denn ignoretabelle bzw. fehltabelle enthalten mit Sicherheit keinne NULL-Werte in der betreffenden Spalte. NULL wurde erst im Ergebnistabelle aufgrund von LEFT JOIN hinzugefügt, daher muss man im Ergebnis filter, also in WHERE

        SELECT a.artikel_id, a.`name`, a.preis
        FROM isttabelle a
        LEFT JOIN ignotabelle b ON a.artikel_id = b.artikel_id
        LEFT JOIN fehltabelle c ON a.artikel_id = c.artikel_id
        WHERE c.artikel_id IS NULL AND b.artikel_id IS NULL

        Kommentar


        • #5
          Aha, also doch mit WHERE. In vielen Documenten ist das in dem Fall nicht richtig erklärt. Habs nun verstanden und es geht super.

          asp2php Du bist ein Gott.

          Tausend Dank
          Gruß Haxley

          Kommentar


          • #6
            Aha, also doch mit WHERE. In vielen Documenten ist das in dem Fall nicht richtig erklärt. Habs nun verstanden und es geht super.
            In ON sollten normalerweise die Verbindungen stehen, Einschränkungen gehören in WHERE rein.
            Die Regeln | rtfm | register_globals | strings | SQL-Injections | [COLOR=silver][[/COLOR][COLOR=royalblue]–[/COLOR][COLOR=silver]][/COLOR]

            Kommentar

            Lädt...
            X