Information ausblenden
Willkommen im Forum für alle Datenbanken! Registriere Dich kostenlos und diskutiere über DBs wie Mysql, MariaDB, Oracle, Sql-Server, Postgres, Access uvm

Falsche First(ID) durch Inner Join?

Dieses Thema im Forum "Microsoft SQL Server" wurde erstellt von sqler, 16 September 2013.

  1. sqler

    sqler Benutzer

    Hallo!

    Ich habe derzeit das Problem, dass die falsche First(ID) durch ein Inner Join gezogen wird. In diesem Beispiel sollten die IDs 1 und 2 ausgegeben werden. Entferne ich den zweiten Inner Join stimmt bei mir die Reihenfolge der IDs. Was könnte der Fehler sein?


    Beispiel:

    SELECT FIRST (Article.ArticleID) AS ArticleID,
    SUM (Article.Amount) AS Amount,
    Article.ArticleDescription,
    Article.ArticleType,
    Tabelle2.ArticleTypeDescription,
    Tabelle3,ArticleType2Description
    INTO NewTable
    FROM (Article
    INNER JOIN Tabelle2 ON Tabelle2.ArticleType = Article.ArticleType)
    INNER JOIN Tabelle3 ON Tabelle3.ArticleType2 = Article.ArticleType2
    WHERE Article.ArticleType = 1
    GROUP BY
    Article.ArticleType
    Tabell2.Feld2,
    Tabelle3,Feld3;


    Tabelle1
    ArticleID, ArticleDescription, Amount, ArticleType, ArticleType2
    1, Notebook, 5, 1, 1
    2, Win8, 10, 1, 2
    3, Notebook, 1, 1
    4, Win8, 2, 1, 2

    Tabelle2
    ArticleType, ArticleTypeDescription
    1, System

    Tabelle3
    ArticleType2, ArticleType2Description
    1, Software
    2, Hardware



    Nun bekomme ich als Ergebnis in der NewTable z. B.
    ArticleID, ArticleDescription, Amount, ...
    3, Notebook, 6, ...
    4, Win8, 12, ...
     
  2. ukulele

    ukulele Datenbank-Guru

    Ich habe FIRST() noch nie genutzt und mir scheint das es das unter MSSQL so wie es hier angewandt wird auch nicht gibt. Ist das eventuell Access?

    In jedem Fall macht FIRST() oder wie MS es beschreibt FIRST_VALUE() naheligenderweise nur in Verbindung mit ORDER BY Sinn. FIRST bezieht sich nicht auf so etwas wie den "ältesten" oder den "ersten Datensatz", so etwas gibt es eigentlich nicht in einer Relationalen Datenbank, sondern auf eine Reihenfolge durch Sortierung (ORDER BY). Die fehlt in deinem Code aber komplett.
    http://technet.microsoft.com/en-us/library/hh213018.aspx
     
  3. sqler

    sqler Benutzer

    Ja, läuft unter Access.

    OK, das ORDER BY funktioniert bei dem Script leider nicht. Wie würde ich dann richtigerweise den ersten Datensatz auslesen?
     
  4. akretschmer

    akretschmer Datenbank-Guru

    Ich würde es mit min() versuchen, als Aggregatsfunktion. Dein gezeigtes SQL dürfte einklich gar nicht funktionieren, da Du die im Select genannten Spalten nicht alle entweder in einer Aggregation oder im GROUP BY genannt hast. Z.B. Article.ArticleDescription. Bis jetzt dachte ich, nur MySQL ist so Kacke, das zu akzeptieren...
     
  5. sqler

    sqler Benutzer

    Perfekt - vielen Dank. Min funktioniert hier optimal.

    Wegen dem Article.ArticleDescription hast du recht. Er würde das so nicht akzeptieren. Als ich das
    Beispiel geschrieben habe, hatte ich das wohl übersehen.
     
  6. akretschmer

    akretschmer Datenbank-Guru

    Ah okay, mein Weltbild bzgl. MySQL stimmt wieder ;-)
     
Die Seite wird geladen...

Diese Seite empfehlen

  1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden