Frage

Normalerweise brauche ich in einem gewissen Bereich Daten aus einer Tabelle abzurufen; beispielsweise eine separate Seite für jedes Suchergebnis. In MySQL verwende ich LIMIT Schlüsselwort aber in DB2 ich weiß es nicht. Jetzt benutze ich diese Abfrage für Datenbereich abgerufen werden.

SELECT * 
FROM(
   SELECT  
      SMALLINT(RANK() OVER(ORDER BY NAME DESC)) AS RUNNING_NO
      , DATA_KEY_VALUE
      , SHOW_PRIORITY
   FROM 
      EMPLOYEE
   WHERE 
      NAME LIKE 'DEL%'
   ORDER BY
      NAME DESC
   FETCH FIRST 20 ROWS ONLY
) AS TMP
ORDER BY 
  TMP.RUNNING_NO ASC
FETCH FIRST 10 ROWS ONLY

, aber ich weiß, es ist schlechter Stil. So, wie für höchste Leistung abzufragen?

War es hilfreich?

Lösung

Meine Forderung in DB2 9.7.2 bereits hinzugefügt wurde.

DB2 9.7.2 fügt neue Syntax für Grenzabfrageergebnis wie unten veranschaulichen:

SELECT * FROM TABLE LIMIT 5 OFFSET 20

Die Datenbank wird kein Ergebnis von Zeile abzurufen. 21 - 25

Andere Tipps

Nicht sicher, warum Sie die TMP-Tabelle erstellen. Ist das nicht RUNNING_NO in aufsteigender Reihenfolge aready? Ich würde denken:

SELECT SMALLINT(RANK() OVER(ORDER BY NAME DESC)) AS RUNNING_NO,
       DATA_KEY_VALUE,
       SHOW_PRIORITY
  FROM EMPLOYEE
 WHERE NAME LIKE 'DEL%'
 ORDER BY NAME DESC
 FETCH FIRST 10 ROWS ONLY

würden die gleichen Ergebnisse liefern.

Ein Index über Namen auf der Tabelle EMPLOYEE Nachdem die Leistung dieser Abfrage steigern.

Es ist sehr schwierig, es ist abhängig, welche Datenbank Sie Sie haben.

Beispiel:

SELECT * FROM ( 
    SELECT 
      ROW_NUMBER() OVER (ORDER BY ID_USER ASC) AS ROWNUM,  
      ID_EMPLOYEE, FIRSTNAME, LASTNAME 
    FROM EMPLOYEE 
    WHERE FIRSTNAME LIKE 'DEL%' 
  )  AS A WHERE A.rownum
BETWEEN 1 AND 25
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top