Announcement

Collapse
No announcement yet.

Problem mit Subselect

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

  • Problem mit Subselect

    Hallo Alle,

    ich habe eine Tabelle mit den Daten zu allen Büchern von Bibliothek 1 (asz.bestand) und eine Tabelle mit den Daten von Bibliothek 2 (asz.geo). Nun möchte ich folgendes wissen: Wieviele Exemplare eines Buches sind in Bibliothek 1 vorhanden - aber nur derjenigen Bücher, die in Bibliothek 2 vorhanden sind. Anders formuliert: Wieviele Exemplare der Bücher von Bibliothek 2 sind in Bibliothek 1 vorhanden. Ich habe versucht, das in folgenden Query umzusetzen:

    SELECT Verfasser, Titel, Jahr, Katkey, COUNT(*)
    FROM asz.bestand
    WHERE Katkey IN
    (
    SELECT Katkey
    FROM asz.geo
    )
    GROUP BY Katkey
    LIMIT 0, 10000000;

    Dies erbringt mir aber leider nur die Results des Hauptquerys - als ob es den Subquery gar nicht gäbe. Wer kann mir helfen? Wäre für Eure Hilfe sehr dankbar,

    viele Grüße
    Andre

  • #2
    Hallo
    Originally posted by asz View Post
    ...Dies erbringt mir aber leider nur die Results des Hauptquerys - als ob es den Subquery gar nicht gäbe.
    Woraus schlussfolgerst du das?

    Hinweis: Formatierung von SQL in Beiträgen

    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 Falk,

      daraus, dass ich den Hauptquery auch schon ohne Subquery gemacht habe und exakt dieselbe Ergebniszahl herausgekommen ist. Ich kenne die Zahl an Datensätzen, die bei der Abfrage mit Subquery herauskommen sollte - und dies ist sie nicht.

      Danke Dir
      Andre

      Comment


      • #4
        Hallo,

        sind denn verfasser, titel und jahr funktional von katkey abhängig?
        Ansonsten wäre nämlich deine Gruppierung falsch und dein Ergebniss mehr oder weniger nicht interpretierbar.

        Gruss 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
          Hallo Falk,

          danke für Deine Antwort - bin mir nicht ganz sicher, was Du mit funktional abhängig meinst. Ich beschreib's noch mal anders:

          Die Tabellen asz.bestand und asz.geo sehen strukturell gleich aus, nämlich etwas so: Verfasser, Titel, Verlagsort, Verlag, Erscheinungsjahr, Signatur, Katkey. Jeder Datensatz beschreibt ein Exemplar eines Buches, dieses hat eine individuelle Signatur - der Katkey aber beschreibt nicht das Exemplar, sondern den Titel - es sind also mehrere Exemplare/Datensätze mit demselben Katkey. Dies zur Datenstruktur.

          Nun zu den Daten: asz.geo ist eine Untermenge von asz.bestand. Ich will nun für jeden Katkey in asz.geo wissen, wieviele Exemplare dieses Katkeys in asz.bestand vorhanden sind. Ins Reale übersetzt: asz.geo ist eine kleine Bibliothek; ich will bei jedem ihrer Bücher wissen, wie oft es insgesamt im Bestand der großen Gesamtbibliothek vorhanden ist.

          Ich hoffe, ich habe mich verständlich ausgedrückt. Ist meine Abfrage falsch? Ich wäre Dir sehr dankbar, wenn Du mir helfen könntest,

          viele Grüße
          Andre

          Comment


          • #6
            Hallo,
            Originally posted by asz View Post
            ...der Katkey aber beschreibt nicht das Exemplar, sondern den Titel - es sind also mehrere Exemplare/Datensätze mit demselben Katkey.
            Damit sind verfasser, titel und jahr eben NICHT funktional abhängig. Damit ist deine Gruppierung schlichtweg falsch und du bekommst ein Ergebnis was mehr oder weniger nicht interpretierbar ist.

            In der Select-Klausel einer gruppierten Abfrage dürfen nur Aggregatfunktionen stehen zzgl. der in der GROUP BY-Klausel aufgeführten bzw. von diesen funktional abhängigen Feldern. Du mußt also nach Verfasser, Titel, Jahr, Katkey gruppieren, um ein korrektes Ergebnis zu erhalten.

            Auch ist es hilfreich (wenn auch nicht zwingend notwendig) jeder Tabelle einen Alias zuzuweisen und alle Felder mit dem jeweiligen Alias zu qualifizieren, um Namenskonflikte auszuschliessen.

            [highlight=sql]
            SELECT a.Verfasser, a.Titel, a.Jahr, a.Katkey, COUNT(*)
            FROM asz.bestand a
            WHERE a.Katkey IN
            (
            SELECT b.Katkey
            FROM asz.geo b
            )
            GROUP BY a.Verfasser, a.Titel, a.Jahr, a.Katkey
            [/highlight]

            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


            • #7
              Super, Falk - ganz herzlichen Dank!! Das hilft mir sehr weiter,
              viele Grüße
              Andre

              Comment

              Working...
              X