Zum Inhalt springen

sql abfrage


debitux

Empfohlene Beiträge

Hallo,

Top ist doch nicht das selbe wie Limit oder?!?! Top gibts auch noch nicht bei allen MSSQL Versionen... Hab mich darüber schon schlau gemacht...

Der Unterschied zwischen Top und Limit

Top 6 z.B. liefert einfach die ersten 10 Datensätze...


spalte1 spalte2

name1  buchung1

name1  buchung2

name1  buchung3

name2  buchung1

mame3 buchung1

name5  buchung1

Limit 1 würde doch folgendes ergeben...

spalte1 spalte2

name1  buchung1

name2  buchung1

mame3 buchung1

name5  buchung1

name6 buchung1

name7 buchung1

usw...

Ich kenne mich nicht so gut mit Sql aus... Wie kann ich dann Top dazu bringen das selbe wie limit zutun?

Mir ist nur geläufig das sowas in einer WHERE Abfrage mit MAX() funktionieren soll...

Hast du ein Beispiel?

Gruß

debitux...

Link zu diesem Kommentar
Auf anderen Seiten teilen

Original geschrieben von debitux

Hallo,

Top ist doch nicht das selbe wie Limit oder?!?! Top gibts auch noch nicht bei allen MSSQL Versionen... Hab mich darüber schon schlau gemacht...

Der Unterschied zwischen Top und Limit

Top 6 z.B. liefert einfach die ersten 10 Datensätze...



spalte1 spalte2

name1  buchung1

name1  buchung2

name1  buchung3

name2  buchung1

mame3 buchung1

name5  buchung1

Limit 1 würde doch folgendes ergeben...


spalte1 spalte2

name1  buchung1

name2  buchung1

mame3 buchung1

name5  buchung1

name6 buchung1

name7 buchung1

usw...

Ich kenne mich nicht so gut mit Sql aus... Wie kann ich dann Top dazu bringen das selbe wie limit zutun?

Mir ist nur geläufig das sowas in einer WHERE Abfrage mit MAX() funktionieren soll...

Hast du ein Beispiel?

Gruß

debitux...

Hmm, soweit ich weiß, limitiert LIMIT doch die ANzeige der Datensätze auf die angegebene Anzahl, oder? Das tut TOP auch - es werden halt z.B. bei TOP 10 die obersten 10 Datensätze angezeigt - und LIMIT 10 mach doch das selbe, oder?

Ansonsten wüsste ich da leider nix...

Link zu diesem Kommentar
Auf anderen Seiten teilen

*Wer lesen kann, ist klar im Vorteil*

(Quelle: http://www.mysql.com/doc/en/SELECT.html)

The LIMIT clause can be used to constrain the number of rows returned by the SELECT statement. LIMIT takes one or two numeric arguments, which must be integer constants. With one argument, the value specifies the number of rows to return from the beginning of the result set. With two arguments, the first specifies the offset of the first row to return, the second specifies the maximum number of rows to return. The offset of the initial row is 0 (not 1): To be compatible with PostgreSQL MySQL also supports the syntax: LIMIT row_count OFFSET offset.

mysql> SELECT * FROM table LIMIT 5,10; # Retrieve rows 6-15

To retrieve all rows from a certain offset up to the end of the result set, you can use -1 for the second parameter:

mysql> SELECT * FROM table LIMIT 95,-1; # Retrieve rows 96-last.

If one argument is given, it indicates the maximum number of rows to return:

mysql> SELECT * FROM table LIMIT 5; # Retrieve first 5 rows

In other words, LIMIT n is equivalent to LIMIT 0,n.

Die Syntax für MS-SQL hingegen lautet, wie beetFreeQ bereits sagte, korrekt:


SELECT [ ALL | DISTINCT ]

    [ TOP n [PERCENT] [ WITH TIES] ] 

    <select_list>

Daraus ergibt sich: (mySQL-Syntax)
select * from tbl1 order by id limit 1
und (MS-SQL-Syntax)
select top 1 * from tbl1 order by id

liefern identische Resultate. (Identische Tabellen vorausgesetzt.)

Link zu diesem Kommentar
Auf anderen Seiten teilen

Du kannst aber bei top nicht folgendes machen


select * order by nachname top 1

Und bei Limit funzt das :-)...

select * order by nachname limit 1

Das ist genau was ich brauche und da ist Top nicht das richtige. Top liefert nur generell die ersten datensätze und kann nicht die datensätze nach einem weiteren Kriterium wie im Beispiel "nachname" liefern.

Ich habs doch ausprobiert?!? :-)

Gruß

debitux

Link zu diesem Kommentar
Auf anderen Seiten teilen

Das

select * order by nachname top 1
bringt in der Tat recht wenig, denn die korrekte Syntax lautet:
SELECT [ ALL | DISTINCT ]

    [ TOP n [PERCENT] [ WITH TIES] ] 

    <select_list>

Daraus ergibt sich, dass
select top 1 * order by nachname
das gleiche Resultat bringen muss, wie
select * order by nachname limit 1

wenn gilt, dass

SELECT * FROM table LIMIT 5; # Retrieve first 5 rows

In other words, LIMIT n is equivalent to LIMIT 0,n.

ist.

Damit sollte dann auch die These

Top liefert nur generell die ersten datensätze und kann nicht die datensätze nach einem weiteren Kriterium wie im Beispiel "nachname" liefern.
hinfällig sein, denn das <select_list>-statement ist NICHT eingeschränkt.
Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...