Announcement

Collapse
No announcement yet.

Viel zu viele Ergebnisse bei SQL Abfrage

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

  • Viel zu viele Ergebnisse bei SQL Abfrage

    Hallo an alle,

    ich kann leider die SQL Query nicht posten, da diese Daten aus dem Produktivsystem enthält.

    Ich denke aber, dass das Ergebnis sehr eindeutig ist und mit Sicherheit schon bekannt ist. (Anfängerfehler) :-)


    Ich hätte als Ergebnis der SQL Abfrage gerne folgendes: (fiktiv)

    Kunde - Produkt - Datum - Gesamtpreis - Verkäufer
    ----------------------------------------------------------
    A Bleistift 1.1.15 5 Helmut
    B Radierer 2.1.15 1 Andreas

    Es wurden bislang auch nur 2 Bestellungen eingegeben.
    Es soll also angezeigt werden wer was wann um wie viel bei wem gekauft hat.


    In Wirklichkeit sieht es aber so aus: (Es wird komischerweise für jedes Produkt in der Datenbank eine eigene Zeile gemacht, obwohl diese gar nicht gekauft wurden.)
    In der Datenbank gibt es 5 Produkte. (Bleistift, Radierer, Kalender, Telefon und Papier)


    Kunde - Produkt - Datum - Gesamtpreis - Verkäufer
    ----------------------------------------------------------
    A Bleistift 1.1.15 5 Helmut
    A Radierer 1.1.15 5 Helmut
    A Kalender 1.1.15 5 Helmut
    A Telefon 1.1.15 5 Helmut
    A Papier 2.1.15 5 Helmut
    B Bleistift 2.1.15 5 Andreas
    B Radierer 2.1.15 5 Andreas
    B Kalender 2.1.15 5 Andreas
    B Telefon 2.1.15 5 Andreas
    B Papier 2.1.15 5 Andreas

    Die rot markierten Einträge wären okay, aber die anderen möchte ich nicht sehen.

    Kann mir jemand sagen wo das Problem liegen kann?

  • #2
    Ich vermute Du hast einfach die Verknuepfungsbedingung vergessen. Grundsaetzlich ist ein JOIN zweier Tabellen immer ein Kreuzprodukt der beiden Tabellen. Das heisst jede Zeile der einen Tabelle wird mit jeder Zeilen der anderen Tabelle kombiniert. Ich gehe jetzt mal davon aus, dass Du eine Tabelle Kunde und eine Tabelle Bestellung hast. Dann muesste die Abfrage etwa so aussehen:

    [highlight=sql]
    SELECT *
    FROM Kunde k
    JOIN Bestellung b ON k.KUNDE_ID = b.KUNDE_ID
    [/highlight]

    Du kannst die KUNDE_ID auch im WHERE statement verknuepfen, der Lesbarkeit wegen macht man das aber ueblicherweise so. Man kann dann besser erkennen was die Tabellen verknuepft und was tatsaechlich weitere Einschraenkungen sind. Falls Du z.B. nur Kunden mit dem Namen "A" haben mochtest wuerde im WHERE noch "k.NAME = 'A'" stehen.

    Comment


    • #3
      Originally posted by lnino View Post

      Kunde - Produkt - Datum - Gesamtpreis - Verkäufer
      ----------------------------------------------------------
      A Bleistift 1.1.15 5 Helmut
      B Radierer 2.1.15 1 Andreas

      Es wurden bislang auch nur 2 Bestellungen eingegeben.
      Es soll also angezeigt werden wer was wann um wie viel bei wem gekauft hat.


      In Wirklichkeit sieht es aber so aus:

      In der Datenbank gibt es 5 Produkte. (Bleistift, Radierer, Kalender, Telefon und Papier)


      Kunde - Produkt - Datum - Gesamtpreis - Verkäufer
      ----------------------------------------------------------
      A Bleistift 1.1.15 5 Helmut
      A Radierer 1.1.15 5 Helmut
      A Kalender 1.1.15 5 Helmut
      A Telefon 1.1.15 5 Helmut
      A Papier 2.1.15 5 Helmut
      B Bleistift 2.1.15 5 Andreas
      B Radierer 2.1.15 5 Andreas
      B Kalender 2.1.15 5 Andreas
      B Telefon 2.1.15 5 Andreas
      B Papier 2.1.15 5 Andreas
      Noch ergänzend zu fanderlf:
      Nimmt man die Beispieldaten oben, scheint konkret die Produkttabelle ohne Join Kriterien im Select-Statement eingebunden zu sein (Indiz ist: alle 5 Produkte werden vollständig wiederholt je real vorhandener Bestellung, also 2x). Noch weiter fantasiert, fehlt dann je nach Datenmodell offenbar die Verknüpfung zwischen Bestellung(oben als Datum) und Produkt. Also inetwa
      ..from .. bestellung b join produkt p on b.produktid = p.produktid ..
      Gruß, defo

      Comment

      Working...
      X