Announcement

Collapse
No announcement yet.

GROUP BY bei MS SQL

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

  • GROUP BY bei MS SQL

    Folgende (MY)SQL-Anweisung listet alle Felder (*) von "artikel" auf, plus die Summe aller Bestellmengen aus der Tabelle "bestellungen".

    In MySQL funktioniert es ohne Probleme (es reicht wohl das bzw. die Schlüsselfelder aus).

    Code:
    SELECT artikel.*, SUM(bestellungen.menge)
    FROM artikel
    LEFT JOIN bestellungen ON artikel.id = bestellungen.artikel_id
    GROUP BY artikel.id;
    In MS SQL dagegen, so scheint mir, muss man alle Felder von "artikel", die man haben will, einzeln angeben. sowohl beim SELECT und dazu noch hinterm "GROUP BY".

    Täusche ich mich, oder geht das bei MS SQL auch einfach(er)?

    Viele Grüße

    Egon Schmid

  • #2
    Es gibt glaub ich irgendeinen Parameter bei MySQL, der diese und andere Nettigkeiten ermöglicht bzw. "neuerdings" disabled (früher war das mal Standard, bzw. nicht abschaltbar)
    Ich weiß leider nicht mehr, wie der Parameter heisst und ob ich das nicht sogar verwechsele.

    Ich würde jedenfalls niemals auf die Idee kommen, so einen Sch... anzuwenden, um 5 Feldnamen in meinen Statements zu sparen. (Und schleunigst nach diesem Schalter suchen und deaktivieren, wenn ich mySQL verwenden würde)
    Gruß, defo

    Comment


    • #3
      Hallo,
      Originally posted by defo View Post
      ...Ich würde jedenfalls niemals auf die Idee kommen, so einen Sch... anzuwenden,
      Wobei man aber anmerken muss, dass der Sch... nach SQL Standard seit Version 2003 KORREKT ist. Natürlich nur solange die artikel.id eindeutig ist und alle weiteren Werte funktional davon abhängig sind.
      Die Tatsache das nahezu alle DBMS die korrekte Umsetzung des 2003er Standards ignorieren, liegt wohl in der Schwierigkeit begründet, funktionale Abhängigkeit zu erkennen. MySQL überlässt es hier dem Programmiere dies zu tun und liefert ggfs. eben völlig unsinnige Ergebnisse.
      Mit dem bereits angesprochenen Parameter (--sql-mode="ONLY_FULL_GROUP_BY") lässt sich dies dann auch bei MySQL verhindern.

      Aber zurück zum Thema: Ja, bei MSSQL (und allen anderen mir bekannten DBMS ausser MySQL) müssen in der GROUP BY Klausel ALLE Felder aus der SELECT-Klausel aufgeführt werden, die nicht aggregiert sind.

      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