Matti Mäkitalo: Hilfebei SQL Abfrage

Beitrag lesen

Hi,

ich bräuchte eine Abfrage die mir alle "rezeptid"'s liefert, die nicht die "eigenschaftsid" 39 haben. Die Datem kommen aus einer View, deshalb gibts keinen Primärschlüssel. Steh da irgendwie etwas auf dem Schlauch..

rezeptid, titel, eigenschaftsid, bezeichnung
1, 'Chili con Carne', 64, 'Fleisch, Schinken, Lachs'
1, 'Chili con Carne', 39, 'Rindfleisch'
1, 'Chili con Carne', , ''
2, 'mein titel', , ''
4, 'Kartoffelsalat', , ''
4, 'Kartoffelsalat', 64, 'Fleisch, Schinken, Lachs'
4, 'Kartoffelsalat', 39, 'Rindfleisch'
5, 'Spargecremesoup á la provence  ', 50, 'Glutamat'
5, 'Spargecremesoup á la provence  ', 28, 'Gluten'
5, 'Spargecremesoup á la provence  ', 72, 'Suppen & Fertiggerichte'
5, 'Spargecremesoup á la provence  ', 51, 'Aromen'
5, 'Spargecremesoup á la provence  ', 53, 'Farbstoffe'
5, 'Spargecremesoup á la provence  ', 61, 'Gewürze, Salz, Essig, Öl'

Ich interpretiere deine Frage so:
Gib mir alle Rezepte, welche nicht die Zutat 39 (Rindfleisch?) haben.

Dies wäre etwa so möglich:

  
SELECT rezeptid                                   -- gib mir alle rezeptid  
  FROM deinview                                   -- aus meiner view  
  WHERE                                           -- welche  
    NOT EXISTS                                    -- nicht die Zutat  
      (SELECT *                                   -- gib mir alle Zutaten  
         FROM deinview AS dv                      -- aus meiner view  
         WHERE dv.rezeptid = deinview.rezeptid    -- die zu meinem Rezept gehören  
           AND dv.eigenschaftsid = 39             -- und Rindfleisch beinhalten  
      )  

Das ist deswegen nicht leicht zu lesen, da deine View die normalisierte Struktur, aus welcher du bereits einfach alles auslesen könntest, bereits verdeckt.

Ich nehme an, dass es eine Relation "rezept" und eine Relation "zutat" gibt, welche über den Primärschlüssel "rezeptid" miteinander verknüpft sind (in einer 1:n Beziehung).
Dann wäre das soetwas wie

  
SELECT rezeptid                                   -- gib mir alle rezeptid  
  FROM rezept                                     -- aus der Menge aller Rezepte  
  WHERE                                           -- bei welchen  
    NOT EXISTS                                    -- keine Zutat existiert  
      (SELECT *                                   --  
         FROM zutat                               --  
         WHERE zutat.rezeptid = rezept.rezeptid   -- die zu meinem Rezept gehört  
           AND zutat.eigenschaftsid = 39          -- und Rindfleisch beinhaltet  
      )  

Bis die Tage,
Matti