Announcement

Collapse
No announcement yet.

Vergleich Wert einer Tabelle mit mehreren Spalten einer anderer Tabelle

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Vergleich Wert einer Tabelle mit mehreren Spalten einer anderer Tabelle

    Hallo allerseits,

    Ich hab da ein Problem. Vorab erstmal meine Tabbellen.

    Spalten Tabelle1(produktanwendung):
    id [AutoIncrement| int(11)| PK (für Tabelle2-id_anwendung)] name_produktanwendung [char (50)|NULL-ja|]

    Spalten Tabelle2(anwendung_bewertung_version) :
    versionsnummer[int(11)] id_anwendung[int(11)|FK (für Tabelle1-id)]
    bewertungseigenschaft[char(20)]
    id_name_produkt_gleicher_bewertung1[int(11)|FK(für Tabelle3-id)]
    id_name_produkt_gleicher_bewertung2[int(11)|FK(für Tabelle3-id)]
    id_name_produkt_gleicher_bewertung3[int(11)|FK(für Tabelle3-id)]

    Spalten Tabelle3(produktname) :
    id[int(11)|PK(für Tabelle2-id_name_produkt_)]
    name_produkt[char(20)]


    Dies ist ein Auszug aus einer komplexen-Tabellenstruktur. Es gibt Produkte, die für bestimmte Anwendungen eingesetzt werden können.
    Diese Anwendungen haben verschiedene Versionen. In der jeweiligen Version werden die dafür nutzbaren Produkt und die ebenfallls eine
    gleiche Bewertung bekommen haben hinterlegt.
    Nun möchte ich den Namen der Anwendung ausgegeben haben, in dem ich ein Produkt vorgebe. Es kann jetzt sein, dass das vorgegebene Produkt
    in der Spalte id_name_produkt_gleicher_bewertung1, -2, -3 hinterlegt ist. D. h ich möchte mehrere Spalten einer Tabelle mit einem Wert einer
    anderen vergleichen.

    Hier mal mein Versuch.
    [highlight=sql]
    SELECT
    name_produktanwendung
    FROM
    produktanwendung JOIN anwendung_bewertung_version
    ON
    produktanwendung.id = anwendung_bewertung_version.id_anwendung

    JOIN produktname As t1
    ON
    anwendung_bewertung_version.id_name_produkt_gleich er_bewertung1 = t1.id

    JOIN produktname As t2
    ON
    anwendung_bewertung_version.id_name_produkt_gleich er_bewertung2 = t2.id

    JOIN produktname As t3
    ON
    anwendung_bewertung_version.id_name_produkt_gleich er_bewertung3 = t3.id


    WHERE
    t1.name_produkt = 'übergebener_name'
    OR
    t2.name_produkt = 'übergebener_name'
    OR
    t3.name_produkt = 'übergebener_name'
    [/highlight]

    Mein Problem ist jetzt das mir ein leeres Resultat ausgegeben wird, also kein Fehler. Es ist auch 100% ein DB eintrag vorhanden. Auch der übergebene name ist 100% richtig.

    Hab ich ein Denkfehler was die Abfrage betrifft?

    kann mir jemand weiterhelfren?

    Vielen Dank schon mal.
    Viele Grüße
    Zuletzt editiert von Falk Prüfer; 02.08.2011, 09:23. Reason: Highlighting

  • #2
    Hab's nur kurz überflogen. Aber ich denke, was Du möchtest bekommst Du mit Left JOINS
    und ersetze die Where Bedingung durch:
    WHERE
    produktanwendung.name_produkt = 'übergebener_name'

    Gruß
    docendo discimus

    Comment


    • #3
      Hallo,

      ich hab es jetzt nur mit LEFT JOIN versucht. in der WHERE Bedingung hab ichs so gelassen, also die OR-Anweisung. Wenn ich die WHERE Bedingung durch produktanwendung.name_produkt = 'übergebener_name' (du meinst sicherlich produktname.name_produkt = 'übergebener_name' ) bekomme ich eine Fehlermeldung " unbekannte tabelle". Nutze ja auch TAbellen Aliase. Die brauch ich wiederum weil ich auf mehrere Spalten der Tabelle verweise.

      ES hat funktioniert!! Danke!!

      Aber ich mussgestehen , dass ich das mit dem LEFT JOIN nicht ganz verstehe. Der LEFT JOIN übergibt doch alle Daztensätze der linken Tabelle in die Ergebnistabelle, auch wenn es dazu in der verglichenen Tabelle keine entsprechenden keine DAtensätze vorhanden sind.

      In meine Fall will ich aber doch ein Ergebnis erzielen, wenn eine von mehreren Spalten der einen Tabelle (hier:anwendung_bewertung_version) mit dem übergebenen Wert der anderen Tabelle (hier: Produktname ) übereinstimmen...!!???

      Kann man sowas mit einem LEFT JOIN realisieren, ja ???.

      Für eine kurze Erklärung wäre ich DAnkbar!!

      GRÜßE

      Comment


      • #4
        Pack doch die Where-Bedingungen zum jeweiligen LEFT-JOIN....
        [HIGHLIGHT="SQL"]LEFT JOIN produktname As t3 ON anwendung_bewertung_version.id_name_produkt_gleich er_bewertung3 = t3.id
        AND t3.name_produkt = 'übergebener_name'[/HIGHLIGHT]

        Comment

        Working...
        X