Announcement

Collapse
No announcement yet.

SQL Abfrage (datensätze ausschließen)

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

  • SQL Abfrage (datensätze ausschließen)

    hallo,

    ich habe 2 tabellen Produkt & Farbe

    ein Produkt kann mehrere Farben haben, ich brauche nun eine abfrage in der ich alle produkte angezeigt bekomme die keine blaue farbe haben

    Produkt

    Produktname_FarbID
    Schild1_1
    Schild1_2
    Schild1_3
    Schild2_1
    Schild2_3

    Farbe

    FarbID_Farbe
    1_Rot
    2_Blau
    3_Grün

    wie müßte die abfrage aussehen, damit ich nur Schild 2 als Treffer bekomme?

    mfg
    csc

  • #2
    Hallo,

    sowas kann man mit einer Subquery mit NOT EXISTS bzw. NOT IN oder mit einem OUTER JOIN und zusätzlicher IS NULL Abfrage auf das gejointe Feld lösen.

    siehe auch: Tabelle ohne Daten einer anderen Tabelle ausgeben

    Gruß Falk
    Wenn du denkst du hast alle Bugs gefunden, dann ist das ein Bug in deiner Denksoftware.

    Quellcode ohne ein Mindestmaß an Formatierung sehe ich mir nicht an! Ich leiste keinen Privatsupport per Mail oder PN!

    Comment


    • #3
      Hallo,

      habs mit Not in gelöst

      zur info

      SELECT
      produkt.Produkt,
      farbe.Farbe
      FROM
      farbe,
      produkt
      WHERE
      produkt.produkt not in (select produkt from produkt where farbid=2)
      and
      produkt.farbid = farbe.farbid

      mfg
      csc

      Comment


      • #4
        Hallo,

        über die ggfs. auftretenden "Nebenwirkungen" bei der Verwendung von NOT IN solltest du dir jedoch im Klaren sein .
        Falls es nämlich kein einziges Produkt mit der Farbe farbid=2 gibt und man demzufolge die Liste aller Produkte erwartet wird man schwer enttäuscht, da deine Abfrage für diesen Fall eine LEERE MENGE zurückliefert. Warum? Die Erklärung gibts in meinem Blog: Ist NOT IN die Umkehrung von IN?.
        Wenn du die o.g. Möglichkeit also nicht aus anderen Gründen generell auschliessen kannst, wäre die Verwendung von NOT EXISTS besser. Siehe: Was ist der Unterschied zwischen IN und EXISTS?.

        Gruß Falk
        Wenn du denkst du hast alle Bugs gefunden, dann ist das ein Bug in deiner Denksoftware.

        Quellcode ohne ein Mindestmaß an Formatierung sehe ich mir nicht an! Ich leiste keinen Privatsupport per Mail oder PN!

        Comment


        • #5
          so ganz hab ich noch nicht gerafft ....

          Hallo,

          ich habe es wie folgt "gelöst" ...

          SELECT
          produkt.Typ,
          produkt.Farbid,
          produkt.Barcode,
          produkt.id,
          produkt.Beschreibung
          FROM
          Produkt
          left Join Farbe on produkt.Farbid= Farbe.Farbid
          WHERE
          not Farbe.FabCode=2
          and
          produkt.NrAbschlag=<NrAbschlag>

          das Kurriose ist jedoch, lass ich das "NOT" weg, erhalte ich nur genau die einträge die ausgeschlossen werden sollen, wenn ich das not hinzufüge, erhalte ich alle einträge inclusive der, die ausgeschlossen werden sollen.

          wenn ich anstatt "not Farbe.FabCode=2" "Farbe.FabCode!=2" oder "Farbe.FabCode<>2" mache ändert sich nix daran. was mache ich da falsch?!

          mfg
          csc

          Comment


          • #6
            ich glaube ich habs

            wenn ich deine tutorials richtig verstanden habe, sollte es so passen, erste tests sehen vielversprechend aus ...
            [highlight=sql]
            SELECT
            produkt.Typ,
            produkt.Farbid,
            produkt.Barcode,
            produkt.id,
            produkt.Beschreibung,
            Farbe.Preis
            FROM
            Produkt
            left Join Farbe on produkt.Farbid= Farbe.Farbid
            WHERE NOT EXISTS
            (SELECT 1 FROM Farbe WHERE produkt.Farbid= Farbe.Farbid AND Farbe.FabCode=2)
            And
            Rechnung.NrAbschlag=<NrAbschlag>
            [/highlight]
            Zuletzt editiert von csc101; 05.08.2010, 08:44. Reason: add highlighting

            Comment

            Working...
            X