On Mon, 21 Jul 2003 15:23:49 +0200, Kasper Birch Olsen wrote:
> hvordan får man så nummer 20 til 40 etc?
Man kan altid benytte sig af en passende stored procedure, men hvis man
gerne vil have noget, der fungerer via ren (MS-)SQL, kan det gøres ved at
"vende op og ned" på nogle result sets et par gange og skære først noget
og siden noget mere fra.
Lad os sige, at man ønsker max 5 rækker efter at de første 10 rækker
er oversprunget. Følgende burde give samme resultater (i en tænkt
tabel, der bl.a. indeholder ISO's numeriske koder og navne for lande):
PostgreSQL:
SELECT id_numeric,iso_name
FROM country
ORDER BY id_numeric ASC
LIMIT 5 OFFSET 10;
Giver:
id_numeric | iso_name
------------+------------
36 | AUSTRALIA
40 | AUSTRIA
44 | BAHAMAS
48 | BAHRAIN
50 | BANGLADESH
MySQL:
SELECT id_numeric,iso_name
FROM country
ORDER BY id_numeric ASC
LIMIT 10,5;
Giver:
+------------+------------+
| id_numeric | iso_name |
+------------+------------+
| 36 | AUSTRALIA |
| 40 | AUSTRIA |
| 44 | BAHAMAS |
| 48 | BAHRAIN |
| 50 | BANGLADESH |
+------------+------------+
MSSQL:
SELECT * FROM (
SELECT TOP 5 * FROM (
SELECT TOP 5 * FROM (
SELECT TOP 15 id_numeric, iso_name
FROM country
ORDER BY id_numeric ASC -- note ASC!
) AS FOO ORDER BY id_numeric DESC -- note DESC!
) AS bar
) AS baz ORDER BY id_numeric ASC;
Giver:
------------+------------+
id_numeric | iso_name |
------------+------------+
36 | AUSTRALIA |
40 | AUSTRIA |
44 | BAHAMAS |
48 | BAHRAIN |
50 | BANGLADESH |
------------+------------+
Kender nogen de tilsværende queries for Oracle (noget med "SAMPLE"?) og
DB2 (noget med "FIRST"?)?
Irriterende, at SQL-standarden ikke beskriver en syntaks for denne
forespørgselstype. End ikke SQL:200n (som sandsynligvis bliver SQL:2003)
nævner en syntaks, jvf. dokumentet 5wd-02-foundation-2002-08.pdf der er
indeholdt i
http://www.wiscorp.com/sql/SQL200nFCD.zip
--
Greetings from Troels Arvin, Copenhagen, Denmark