/ Forside / Teknologi / Udvikling / SQL / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
SQL
#NavnPoint
pmbruun 1704
niller 962
fehaar 730
Interkril.. 701
ellebye 510
pawel 510
rpje 405
pete 350
gibson 320
10  smorch 260
"limit" med mssql
Fra : Kasper Birch Olsen


Dato : 21-07-03 09:03

Hej

Jeg sidder leder efter en funktionalitet i mssql der gør det samme som
limit i mysql, så jeg kan lave en phpfunktion der viser en hel masse
entries fordelt på nogle sider. Jeg syntes ikke det er så smart at hente
det hele ind i php først, jeg ville meget hellere bruge sql til det for
at forbedre perfonmance i mit program.

- Kasper


 
 
Peter Lykkegaard (21-07-2003)
Kommentar
Fra : Peter Lykkegaard


Dato : 21-07-03 10:30


"Kasper Birch Olsen" <spam@spam.com> wrote in message
news:3f1b9e3b$0$76051$edfadb0f@dread11.news.tele.dk...
>
> Jeg sidder leder efter en funktionalitet i mssql der gør det samme som
> limit i mysql,

Select TOP 1 from MyTable

mvh/Peter Lykkegaard



Kasper Birch Olsen (21-07-2003)
Kommentar
Fra : Kasper Birch Olsen


Dato : 21-07-03 14:24

Peter Lykkegaard wrote:

> "Kasper Birch Olsen" <spam@spam.com> wrote in message
> news:3f1b9e3b$0$76051$edfadb0f@dread11.news.tele.dk...
>
>>Jeg sidder leder efter en funktionalitet i mssql der gør det samme som
>>limit i mysql,
>
>
> Select TOP 1 from MyTable
>
> mvh/Peter Lykkegaard
>
>
tak... hvordan får man så nummer 20 til 40 etc? Jeg ville først bruge en
identity og så regne mig frem, men problemet opstår når der er blevet
slettet rækker hist og her. Jeg kan ikke rigtigt finde en løsning hvor
jeg kan være sikker på at få række 20, 21, 22... 40.

- Kasper


Troels Arvin (22-07-2003)
Kommentar
Fra : Troels Arvin


Dato : 22-07-03 12:34

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


Peter Brodersen (22-07-2003)
Kommentar
Fra : Peter Brodersen


Dato : 22-07-03 23:58

On Tue, 22 Jul 2003 13:34:12 +0200, Troels Arvin <troels@arvin.dk>
wrote:

>Kender nogen de tilsværende queries for Oracle (noget med "SAMPLE"?) og
>DB2 (noget med "FIRST"?)?

Uden at have det store Oraclekendskab, så er jeg nu og da faldet over
følgende idiom:

SELECT * FROM
(SELECT foo.*,rownum rn FROM
(SELECT id_numeric, iso_name FROM country ORDER BY id_numeric) foo
WHERE rownum <= 15) bar
WHERE rn > 10

De rygter, jeg har hørt, går på at det er nødvendigt med to
subselects, fremfor bare at have WHERE rownum BETWEEN x AND y i samme
led.

Ovenstående er blot én udgave. Jeg er som nævnt ikke den store
Oraclemand, så Oracle som helhed skal næppe dømmes ud fra mine
gætterier :)

--
- Peter Brodersen

Troels Arvin (28-07-2003)
Kommentar
Fra : Troels Arvin


Dato : 28-07-03 15:11

On Wed, 23 Jul 2003 00:58:00 +0200, Peter Brodersen wrote:

>>Kender nogen de tilsværende queries for Oracle (noget med "SAMPLE"?) og
>>DB2 (noget med "FIRST"?)?
>
> Uden at have det store Oraclekendskab, så er jeg nu og da faldet over
> følgende idiom:

OK, tak. Det prøver jeg ved lejlighed (når jeg får adgang til en
fungerende Oracle 9 installation igen).

Har startet følgende side:
http://troels.arvin.dk/db/rdbms/

--
Greetings from Troels Arvin, Copenhagen, Denmark


Jens Gyldenkærne Cla~ (28-07-2003)
Kommentar
Fra : Jens Gyldenkærne Cla~


Dato : 28-07-03 15:26

Troels Arvin skrev:

> Har startet følgende side:
> http://troels.arvin.dk/db/rdbms/

Glimrende initiativ - tak for det.
--
Jens Gyldenkærne Clausen
Velkommen hen til Paris International!
Rejse, lede og fortolkere. Jeres oven på- kø levere i Paris
nemlig... (<http://www.paris-tours-guides.com/index_danish.shtml>)

Søg
Reklame
Statistik
Spørgsmål : 177558
Tips : 31968
Nyheder : 719565
Indlæg : 6408925
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste