View Full Version : SQL Fetch First 1 Rows
Hallo *All,
wenn ich folgenden Select absetze:
select preis from artikelstamm
where nummer = 150000
fetch first 1 rows only
funktioniert das tadellos und ich bekomme wirklich nur den ersten gefundenen Satz angezeigt.
Gebe ich aber ein:
update artikelstamm
set preis =
(select preis from artikelstamm
where nummer = 150000
fetch first 1 rows only )
where nummer = 100000
bekomme ich die Fehlermeldung:
Schlüsselwort FETCH nicht erwartet. Gültige Token: ) UNION EXCEPT.
Geht der Fetch First in einem Subselect nicht oder ist meine Syntax falsch?
Gruss
Ulli
Fetch im Subselect gibts leider wirklich nicht. Hier musst du dir eine andere Methode ausdenken, um nur 1 Satz zu bekommen.
Danke,
(wäre ja auch zu schön gewesen)
mfg
Ulli
welchen willst du denn haben? ohne order by clause überlässt man die Reihenfolge der Sätze der Query Engine und könnte im Extremfall bei mehreren Aufrufen unterschiedliche Reihenfolgen bekommen. Fetch first ohne order by würde auf deutsch dann heißen: "gib mir irgendeinen". Will man einen bestimmten, muss man das präzise sagen:
select ...
from ...
where...
and nochnFeld = select max(...) (oder auch min(...) from... where...
D*B
Hallo *All,
wenn ich folgenden Select absetze:
select preis from artikelstamm
where nummer = 150000
fetch first 1 rows only
funktioniert das tadellos und ich bekomme wirklich nur den ersten gefundenen Satz angezeigt.
Gebe ich aber ein:
update artikelstamm
set preis =
(select preis from artikelstamm
where nummer = 150000
fetch first 1 rows only )
where nummer = 100000
bekomme ich die Fehlermeldung:
Schlüsselwort FETCH nicht erwartet. Gültige Token: ) UNION EXCEPT.
Geht der Fetch First in einem Subselect nicht oder ist meine Syntax falsch?
Gruss
Ulli
welchen willst du denn haben? ... Fetch first ohne order by würde auf deutsch dann heißen: "gib mir irgendeinen".
D*B
Ja, ich wollte tatsächlich irgendeinen von mehreren möglichen Sätzen mit derselben Art.nummer haben, die nur in Verbindung mit dem Lager eindeutig ist d.h. der Artikel kann in unterschiedlichen Lagern vorkommen, muss aber nicht zwangsläufig in jedem definierten Lager vorkommen. Der VKPreis ist in jedem Lager gleich und soll bei bestimmten Artikeln von anderen Artikeln übernommen werden.
Habe das jetzt im Prinzip so gelöst:
update artikelstamm
set preis =
(select preis from artikelstamm
where nummer = 150000 and
lager =
(select max(lager) from
artikelstamm where
nummer = 150000) )
where nummer = 100000
Würde Fetch First im Subselect gehen,
hätte ich mir allerdings den 2. Subselect sparen können.
Nochmals Danke für die Hinweise.
Gruss
Ulli
Warum nicht so? Oder übersehe ich da was wichtiges?
update artikelstamm
set preis =
(select max(preis) from artikelstamm
where nummer = 150000)
where nummer = 100000
Bingo !
Da hab' ich ja ein ziemlich grosses
Brett vor'm Kopf gehabt.
thx
Ulli