debitux Geschrieben 10. November 2003 Teilen Geschrieben 10. November 2003 Hi, ich hätte da mal ne Frage zu einer MS Sql Abfrage... Unter Mysql weiß ich wie es geht... Und zwar wollte ich folgende Abfrage ausprobieren: select * from tbl1 order by id limit 1 Wie funzt das jetzt mit MS Sql? Da scheint es ja kein Limit zu geben... Gruß debitux Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
beetFreeQ Geschrieben 10. November 2003 Teilen Geschrieben 10. November 2003 Ne, Limit gibt's nicht. Dafür gibt's den Befehl "TOP n" - der gibt dir nur vom Anfang gezählt n-viele Sätze der Query zurück. Und den hängst du direkt hinter's SELECT: SELECT TOP 1 * FROM TABELLE Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
debitux Geschrieben 10. November 2003 Autor Teilen Geschrieben 10. November 2003 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... Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
beetFreeQ Geschrieben 10. November 2003 Teilen Geschrieben 10. November 2003 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... Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
just_me Geschrieben 10. November 2003 Teilen Geschrieben 10. November 2003 *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.) Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
debitux Geschrieben 17. November 2003 Autor Teilen Geschrieben 17. November 2003 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 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
just_me Geschrieben 17. November 2003 Teilen Geschrieben 17. November 2003 Dasselect * 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, dassselect top 1 * order by nachname das gleiche Resultat bringen muss, wieselect * order by nachname limit 1 wenn gilt, dassSELECT * 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 TheseTop 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. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
debitux Geschrieben 17. November 2003 Autor Teilen Geschrieben 17. November 2003 Oki hast ja recht ;-). Aber einen Unterschied gibts doch zwischen top / limt. :-PPP mit top kann man keinen offset definieren und muss sich däm**** counten ;-D. Gruß Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
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.