Gerold Kumpfhuber: SELECT

Hallo!
Es gibt (in MS-SQL) die SQL-Abfrage SELECT TOP 10 * FROM TABLLE ...
Gibt es auch einen Abrage die nicht die ersten Datensätze ausliest sondenr zB. vom 10 - 20 Datensatz?
LG
Gerold

  1. Hallo!
    Es gibt (in MS-SQL) die SQL-Abfrage SELECT TOP 10 * FROM TABLLE ...
    Gibt es auch einen Abrage die nicht die ersten Datensätze ausliest sondenr zB. vom 10 - 20 Datensatz?
    LG
    Gerold

    Hallo Gerold

    Der Befehl besteht aus zwei Angaben. Die erste sagt, ab welchem Datensatz abgefragt werden soll und der zweite gibt an, wieviele Datensätze abgefragt werden sollen.

    <?
      $abfrage = "SELECT * FROM links LIMIT 5, 10";
      ?>

    dass heisst, es werden ab dem 5. Eintrag 10 Einträge abgefragt...

    1. yo,

      $abfrage = "SELECT * FROM links LIMIT 5, 10";

      das ist wohl mysql. was er braucht ist aber mssql, sprich wenn ich micht nicht irre, dann kann man limit nicht für mssql verwenden.

      Ilja

  2. Halihallo Gerold

    Es gibt (in MS-SQL) die SQL-Abfrage SELECT TOP 10 * FROM TABLLE ...
    Gibt es auch einen Abrage die nicht die ersten Datensätze ausliest sondenr zB. vom 10 - 20 Datensatz?

    SELECT
        TOP 10 *
      FROM
        (
            SELECT TOP 20 *
            FROM table
            ORDER BY ID ASC
         )
      ORDER BY ID DESC

    etwas umständlich, aber möglich...
    Einfacher gehts mit MySQL[tm] :-)

    Viele Grüsse

    Philipp

    1. Lieber Philipp,
      vielen Dank für Deine Antwort.

      SELECT
          TOP 10 *
        FROM
          (
              SELECT TOP 20 *
              FROM table
              ORDER BY ID ASC
           )
        ORDER BY ID DESC

      Ich glaube so geht es nicht. Du selektierst die ersten 20 Datensätzte und von denen selektierst Du die ersten 10, welche Du dann umdrehst. Gesamt gesehen ist das  SELECT TOP 10 * .......DESC.
      Oder irre ich mich?

      LG
      Gerold

      1. hi,

        Ich glaube so geht es nicht. Du selektierst die ersten 20 Datensätzte und von denen selektierst Du die ersten 10, welche Du dann umdrehst.

        vorher hat er aber bereits die ersten 20 datensätze ebenfalls "umdrehen" lassen,

        SELECT TOP 20 *
                FROM table
                ORDER BY ID ASC

        damit sollte es eigentlich wieder "passen".

        gruss,
        wahsaga

      2. Halihallo Gerold

        SELECT
            TOP 10 *
          FROM
            (
                SELECT TOP 20 *
                FROM table
                ORDER BY ID ASC
             )
          ORDER BY ID DESC

        Ich glaube so geht es nicht. Du selektierst die ersten 20 Datensätzte und von denen selektierst Du die ersten 10, welche Du dann umdrehst. Gesamt gesehen ist das  SELECT TOP 10 * .......DESC.
        Oder irre ich mich?

        Glaube ich, ja. Ich kenne mich mit MS SQL praktisch gar nicht aus,
        könnte gut sein, dass ich irre; obwohl ich dies in diesem
        Zusammenhang für unwahrscheinlich halte.

        Das Prinzip sollte verstanden worden sein. Zuerst wird die ID
        aufsteigend sortiert, davon die ersten 20 selektiert. Im Mainquery
        wird die ganze Geschichte dann "rückwärts" sortiert, sodass die
        letzten der 20 Einträge am Anfang stehen und davon dann 10 genommen.
        Somit haben wir die Datensätze 10-20.

        Deine Aussage würde implizieren, dass die TOP-Anweisung vor dem
        ORDER BY käme, also Priorität hat. Das wäre IMHO unlogisch, denn die
        Selektion kommt sinnvollerweise nach einer Gruppierung oder
        Sortierung. Falls ich recht habe, sollte der Query von oben durchaus
        richtig funktionieren.

        Ich bin mir sogar sicher, dass ich recht habe :-)
        Sogar zu 100% denn alles andere würde mein kleines Weltbild von SQL
        zur Strecke bringen und mir einen weiteren Grund liefern, M$
        zu "hassen" :-)

        Viele Grüsse

        Philipp

        1. Lieber Philipp,

          du hattest recht es funkt so. In der Eile hab ich nur kurz darübergeschaut und da ist es mir komisch vorgekommen. Vielen Dank für Deine Hilfe.

          LG
          Gerold