Announcement

Collapse
No announcement yet.

Beeinflussung durch zweite Tabelle?

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

  • Beeinflussung durch zweite Tabelle?

    Hallo!
    Ich glaube bei SQL spukt es.
    Folgende Abfrage gibt aus, wieviele Seiten es von einem bestimmten Sortiment gibt im Jahr 2007...

    SELECT jahr1.Sortiment,count(jahr1.Seite) AS [Seiten absolut]
    FROM [SELECT DISTINCT Seite, Sortiment,Jahr FROM artikel WHERE Jahr=2007;]. AS jahr1
    GROUP BY jahr1.Sortiment;

    Nun kommt für mich die absolut mysteriöse Geschichte... ich ergänze den FROM-Teil und schon ändert sich das Ergebnis gravierend:

    SELECT jahr1.Sortiment,count(jahr1.Seite) AS [Seiten absolut]
    FROM [SELECT DISTINCT Seite, Sortiment,Jahr FROM artikel WHERE Jahr=2007;]. AS jahr1, artikel
    GROUP BY jahr1.Sortiment;

    Wie kann das angehen? Jemand ne Idee?? Wäre super
    Viele Grüße und einen schönen Wochenanfang!
    Doena

  • #2
    Hallo Doena,

    ganz einfach, Du machst einen impliziten JOIN, gibts aber keine JOIN Bedingung an.
    Deshalb erhällst Du ein Kreuzprodukt, also [Alle Artikel aus 2007] x [Alle Artikel].
    Olaf Helper

    <Blog> <Xing>
    * cogito ergo sum * errare humanum est * quote erat demonstrandum *
    Wenn ich denke, ist das ein Fehler und das beweise ich täglich

    Comment


    • #3
      Wow! Nach 8 Minuten habe ich eine Antwort auf eine Frage, die in einem anderen Forum das ganze Wochenende nicht beantwortet wurde... Klasse! Vielen Dank Olaf!

      Comment


      • #4
        Nun habe ich das ganze mit JOIN gemacht...es wird auch alles eigentlich richtig angezeigt, aber so ganz sauber kann ich das noch nicht gemacht haben. Ganz merkwürdig: Ich führe die Abfrage in Access aus und erhalte die Ausgabe, so wie ich es möchte. Sobal ich aber irgendeine Änderung unternehme erhalte ich folgende Meldune "Syntax-Fehler in FROM-Klausel"... auch, wenn ich die Änderung wieder rückgängig mache. Sprich es ist egal, was ich änder, es geht nur darum, dass ich etwas änder.

        Meine Abfrage sieht so aus:
        Code:
        SELECT sortimente.sortiment_name, Jahr1.Seitenabsolut, Jahr2.Seitenabsolut
            FROM (sortimente LEFT JOIN 
                  [SELECT Sortiment, Count(Seite) AS [Seitenabsolut] FROM 
                           [SELECT DISTINCT Seite, Sortiment,Jahr FROM artikel WHERE Jahr=2005;]. AS xxx GROUP BY Sortiment]. AS Jahr1 ON sortimente.sortiment_name = Jahr1.Sortiment) LEFT JOIN 
                  [SELECT Sortiment, Count(Seite) AS [Seitenabsolut] FROM 
                          [SELECT DISTINCT Seite, Sortiment,Jahr FROM artikel WHERE Jahr=2007;]. AS xxx GROUP BY Sortiment]. AS Jahr2 ON sortimente.sortiment_name = Jahr2.Sortiment;

        Comment


        • #5
          Hallo! durch "Rumprobieren" hab ich jetzt gemerkt, dass es mit dieser Variante funktioniert:

          Code:
          SELECT sortimente.sortiment_name, Jahr1.Seitenabsolut, Jahr2.Seitenabsolut
          FROM (sortimente LEFT JOIN [SELECT Sortiment, Count(Seite) AS Seitenabsolut FROM (SELECT DISTINCT Seite, Sortiment,Jahr FROM artikel WHERE Jahr=2005) AS xxx GROUP BY Sortiment]. AS Jahr1 ON sortimente.sortiment_name = Jahr1.Sortiment) LEFT JOIN [SELECT Sortiment, Count(Seite) AS Seitenabsolut FROM (SELECT DISTINCT Seite, Sortiment,Jahr FROM artikel WHERE Jahr=2007) AS xxx GROUP BY Sortiment]. AS Jahr2 ON sortimente.sortiment_name = Jahr2.Sortiment;
          Kann mir jemand das erklären? Bzw. allgemein gültige Regeln zum Klammernsetzen bei SQL sagen? Weil auch, wenn es jetzt funktioniert...verstehen tue ich es nicht. Mal kommen eckige Klammern um die Abfrage, mal runde....

          Comment


          • #6
            Hallo Doena,

            ja, was Access so an SQL generiert, ist echt grusselig und nicht gerade ANSI-Like.

            Der Unterschied ist ja wirklich nur ( statt [ an der einen Stelle.
            Wieso das so ist, kann ich Dir auch nicht erklären
            Auch in der Online-Doku finde ich nichts dazu; skuril.

            SELECT
            http://msdn.microsoft.com/en-us/library/bb208930.aspx

            SUBQUERIES
            http://msdn.microsoft.com/en-us/library/bb208942.aspx
            Olaf Helper

            <Blog> <Xing>
            * cogito ergo sum * errare humanum est * quote erat demonstrandum *
            Wenn ich denke, ist das ein Fehler und das beweise ich täglich

            Comment


            • #7
              ja, sehr merkwürdig. Trotzdem danke!

              ich habe gerade noch mal in einem weiteren Forum nachgefragt und folgende Antwort erhalten:

              Wenn die Staubschicht die ich da aufwirbele nicht zu dick wäre meine ich hängt es mit dem Schachteln von Klammern zusammen?!
              ([([…])]) und nicht ((((…))))

              Comment

              Working...
              X