Announcement

Collapse
No announcement yet.

Feher bei verschachtelter Select Abfrage

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

  • Feher bei verschachtelter Select Abfrage

    Morgen
    Ich habe ein kleines Problem mit einer Verschachtelten Select Abfrage:


    Code:
    SELECT aID  FROM A GROUP BY aID WHERE bID = (SELECT bID FROM B WERE BoolscherAusdruck)
    Müsste dieser Befehl funktionieren oder ist er vollkommen falsch?

  • #2
    Hallo helo,

    es ist "etwas" falsch.
    Das GROUP BY kommt nach dem WHERE und wenn eine Unterabfrage mehr als ein Ergebnis liefern kann, sollte man besser (immer) mit IN abprüfen:

    [highlight=SQL]SELECT aID
    FROM A
    WHERE bID IN (SELECT bID FROM B WHERE BoolscherAusdruck)
    GROUP BY aID [/highlight]
    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
      a) Group By kommt immer nach einem WHERE...

      b) was ist der Nutzen von einem GROUP BY in Deiner Query
      (dafür nimmt man besser DISTINCT)

      also ungefähr so

      SELECT DISTINCT aID FROM A WHERE bID = (SELECT bID FROM B WHERE BoolscherAusdruck)

      Comment


      • #4
        Ok Vielen Dank für eure Antworten jetzt funktionierts

        Comment


        • #5
          so habe jetzt noch eine Frage:

          Code:
           SELECT a.aID, c.cData
                FROM A a, C c
                WHERE bID IN (SELECT bID FROM B WHERE BoolscherAusdruck)
                GROUP BY aID
          Das hier soll zu der aID noch cData hinzufügen als ergebnis bekomm ich zwar die richtige anzahl reihen und die richten aIDs aber die cData enthalten immer den Wert der zum ersten aID gehört.
          Wie müsste ich das richtig machen?

          Comment


          • #6
            1) das soll gehen? Bei mir liefert SQL-Server folgenden Fehler:
            'cData'-Spalte ist in der Auswahlliste ungültig, da sie nicht in einer Aggregatfunktion und nicht in der GROUP BY-Klausel enthalten ist.

            also im Group By müssen alle Spalten auftauchen, die nicht aggregiert werden
            also letzte Zeile muss so aussehen:
            GROUP BY aID, c.cData

            Comment


            • #7
              hmm danke für die Antwort aber ich glaube so klappt das bei meinem Problem auch nicht, ich beschreibe es mal etwas ausführlicher ohne pseudo SQL Anweisungen

              Ich habe eine User-Tabelle die enthält die User-ID und die User-Nicknames, dann habe ich eine Tabelle die enthält Ereignisse, die mit einer Spalte gruppiert werden, also es gehören immer mehrere zusammen.
              Eine Dritte Tabelle enthält wiederum Daten von Usern zu bestimmten Ereignissen.

              Ich möchte jetzt die User-IDs die zu einer bestimmten Gruppe von ereignissen gehören raussuchen und gleichzeitig am besten noch die User-Nicks hinzufügen. So gings net, geht das überhaupt, wie?
              Attached Files

              Comment


              • #8
                [highlight=sql]
                SELECT *
                FROM User u
                JOIN Data d ON d.uID = u.uID
                JOIN
                (
                SELECT eID
                FROM Ereignis
                WHERE eGroup = 2 -- Hier kann deine ID stehen
                ) e ON e.eID = d.eID
                [/highlight]

                Comment


                • #9
                  Ok vielen Dank das ist so ziemlich genau das, was ich brauchte.
                  Ich musste es nur noch ein bischen abwandeln, weil in der User Tabelle auch noch Dinge wie Passwort und so weiter stehn und ans Ende habe ich einen GROUP BY u.uID,u.uNick Befehl anhängt.

                  Comment


                  • #10
                    Hallo,

                    Originally posted by helo View Post
                    ... ans Ende habe ich einen GROUP BY u.uID,u.uNick Befehl anhängt.
                    Warum das jetzt wieder? Du wurdest doch schon darauf hingewiesen!

                    Originally posted by ebis View Post
                    b) was ist der Nutzen von einem GROUP BY in Deiner Query
                    (dafür nimmt man besser DISTINCT)
                    Originally posted by ebis View Post
                    1) ...also im Group By müssen alle Spalten auftauchen, die nicht aggregiert werden
                    Speziell letztere Aussage solltest du beachten! Da es bei dir trotzdem funktioniert, verwendest du offensichtlich MySQL als DB-Server. Dies ist die einzige mir bekannte DB, die gruppierte Abfragen ohne vollständige GROUP BY-Klausel ausführt und für mein Verständnis ist dies ein MySQL-Bug (auch wenn es mglws. als Feature verkauft wird). Das Ergebnis ist nämlich mehr oder weniger undefiniert - wie du ja selbst schon gesehen hast:
                    Originally posted by helo View Post
                    ...

                    Code:
                     SELECT a.aID, c.cData
                          FROM A a, C c
                          WHERE bID IN (SELECT bID FROM B WHERE BoolscherAusdruck)
                          GROUP BY aID
                    Das hier soll zu der aID noch cData hinzufügen als ergebnis bekomm ich zwar die richtige anzahl reihen und die richten aIDs aber die cData enthalten immer den Wert der zum ersten aID gehört.

                    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

                    Working...
                    X