Falsche First(ID) durch Inner Join?

sqler

Benutzer
Beiträge
12
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, ...
 
Werbung:
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
 
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?
 
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?

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...
 
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.
 
Werbung:
Zurück
Oben