gex01
Goto Top

Probleme mit SQL Statement im Oracle SQL Developer

Datenbank: Oracle 10g

Hallo ich möchte gerne den TOP 1 Befehl von SQL nutzen und habe daher folgenden Befehl gebastelt:

select top 1 from Tabelle where Spalte = Wert

Wenn ich diesen Befehl allerdings ausführen will erhalte ich die Fehlermeldung 923:
"FROM Keyword not found where expected"

Auch der Befehl:

select top 1 Spalte from Tabelle where Spalte = Wert

brachte keinen Erfolg.

Ich habe mal gehört das der Befehl "TOP" nicht überall unterstützt wird.
Da ich Anfänger in diesem Bereich bin wollte ich nun fragen, ob dem so ist, bzw. wo ich die mir zur Verfügung stehende Syntax finden kann ...

Vielen Dank

Gruß
Björn

Content-Key: 77754

Url: https://administrator.de/contentid/77754

Printed on: April 25, 2024 at 07:04 o'clock

Member: SvenGuenter
SvenGuenter Jan 11, 2008 at 08:09:32 (UTC)
Goto Top
SELECT product, descr, email
FROM products
WHERE ROWNUM = 1

ist das äquivalent zu Select TOP1


wenn du die ersten 10 Sätze haben willst

SELECT product, descr, email
FROM products
WHERE ROWNUM <= 10

Zur Info nebenbei in MySQL ist es

SELECT product, descr, email
FROM products
LIMIT 10
Member: gex01
gex01 Jan 11, 2008 at 13:44:34 (UTC)
Goto Top
Also, vielleicht fange ich noch mal etwas weiter oben an ...
Eigentlich will ich erreichen, dass er nach dem ersten gefundenen Datensatz mit der Suche aufhört und nicht noch weiter die Daten durchsucht.

Bsp.: Finde den ersten (und nur den ersten) Datensatz in dem in der Spalte Products 'Bier' vorkommt und zeige diesen an, ohne danach weiter durch die Daten zu suchen. Will damit erreichen, dass er bei einer Tabelle von 10 Mio Zeilen nur bis zum ersten Treffer sucht und nicht bis zum Ende.

Dies soll der select top 1 können, der aber leider nicht funktioniert ( ebenso wie auch der limit nicht funktioniert).

Der where rownum ist hierfür leider nicht geeignet, da ich ja nicht weiss in welcher Zeile der Treffer steht.
Member: SvenGuenter
SvenGuenter Jan 11, 2008 at 14:23:30 (UTC)
Goto Top
SELECT product, descr, email
FROM products
WHERE ROWNUM <= 1 and product="Bier"


das liefert dir die 1. Zeile wo das Produkt Bier ist.

es geht auch folgendes
SELECT product,etc,etc FROM
( SELECT product,etc,etc FROM Products Where Product = 'Bier')
WHERE rownum <= 1

Das ist übrigens die von Oracle empfohlene Schreibweise
Erläuterung
selektiere product,etc,etc aus der selektion produkt,etc,etc von produkt wo produklt gleich 'Bier' ist und daraus nur die erste reihe.


[edit] No problem Biber freue mich das ich mal schneller als du war ;o) [/edit]

Wie ich schon Schrieb Top 1 ist MSSQL und Limit isr MYSQL diese Befehle kannst du NICHT verwenden
Member: Biber
Biber Jan 11, 2008 at 14:30:17 (UTC)
Goto Top
Moin gex01,

SvenGuenther hat schon ziemlich recht mit der ROWNUM-Syntax.
Natürlich macht es nur einen Sinn, wenn Du Deine bisherige WHERE-Klausel auch (als erstes) mit beibehältst.

SELECT product, descr, email
FROM products 
WHERE products LIKE '%Bier%'   
and ROWNUM = 1

Das wäre dann das Äquivalent zum "TOP x,y" oder "FETCH FIRST x ROWs ONLY" aus anderen "Standard"-SQL-Datenbankprodukten.

Grüße
Biber
[Edit] Sorry, SvenGuenther, hab zu langsam getippt [/Edit]