OVH Cloud OVH Cloud

LIMIT .... ?

9 réponses
Avatar
JeromF
Bonjour,

J'aimerais savoir si quelqu'un sait comment, dans un SELECT, on peut
choisir un groupe de résultat.
L'équivalent de la clause LIMIT avec MySQL en fait.

Merci d'avance,

--
Jérôme

9 réponses

Avatar
Nicolas LETULLIER
Bonjour,

Contrairement à mySQL, on ne peut limiter le résultat qu'aux "n" premières
lignes, et non pas commencer à partir d'une certaine

SELECT TOP n * FROM matable

Nicolas.



"JeromF" a écrit dans le message de
news:bqk8ec$8rs$
Bonjour,

J'aimerais savoir si quelqu'un sait comment, dans un SELECT, on peut
choisir un groupe de résultat.
L'équivalent de la clause LIMIT avec MySQL en fait.

Merci d'avance,

--
Jérôme




Avatar
JeromF
Oui, j'avais vu cela. Mais je me demandais si on pouvait faire un
genre de "LIMIT".
A en croire ce que j'ai trouvé sur le net, non.
Tant pis, je vais gérer cela avec des boucles....

Merci.

--
Jérôme

"Nicolas LETULLIER" a écrit dans
le message de news:
Bonjour,

Contrairement à mySQL, on ne peut limiter le résultat qu'aux "n"


premières
lignes, et non pas commencer à partir d'une certaine

SELECT TOP n * FROM matable

Nicolas.



"JeromF" a écrit dans le message de
news:bqk8ec$8rs$
> Bonjour,
>
> J'aimerais savoir si quelqu'un sait comment, dans un SELECT, on


peut
> choisir un groupe de résultat.
> L'équivalent de la clause LIMIT avec MySQL en fait.
>
> Merci d'avance,
>
> --
> Jérôme
>
>




Avatar
bruno reiter [MVP]
On peut faire un "genre" de limit mais c'est couteux

SELECT TOP n xxx
FROM TAB
WHERE id NOT IN (SELECT TOP m xxx
FROM TAB
ORDER BY id)
ORDER BY id

br

"JeromF" wrote in message
news:bqkd1n$bqb$
Oui, j'avais vu cela. Mais je me demandais si on pouvait faire un
genre de "LIMIT".
A en croire ce que j'ai trouvé sur le net, non.
Tant pis, je vais gérer cela avec des boucles....

Merci.

--
Jérôme

"Nicolas LETULLIER" a écrit dans
le message de news:
> Bonjour,
>
> Contrairement à mySQL, on ne peut limiter le résultat qu'aux "n"
premières
> lignes, et non pas commencer à partir d'une certaine
>
> SELECT TOP n * FROM matable
>
> Nicolas.
>
>
>
> "JeromF" a écrit dans le message de
> news:bqk8ec$8rs$
> > Bonjour,
> >
> > J'aimerais savoir si quelqu'un sait comment, dans un SELECT, on
peut
> > choisir un groupe de résultat.
> > L'équivalent de la clause LIMIT avec MySQL en fait.
> >
> > Merci d'avance,
> >
> > --
> > Jérôme
> >
> >
>
>




Avatar
VUILLERMET Jacques
Je ne connais pas LIMIT de MySQL mais si l'objectif est de ramener
uniquement les enregistrements de n à m d'un recordset alors il est peut
être dommage de passer par une boucle et non pas par de l'ensemblisme.

Je propose (sans l'avoir testé !) :
- SELECT TOP n
- SELECT TOP m
puis jointure externe entre les 2 pour ramener les lignes du 1er SELECT qui
ne sont pas dans le second.

Cela pourrait donner en grossier :

SELECT ...
FROM
(SELECT TOP n ...FROM...) A
left outer join
(SELECT TOP m id, ... FROM...) B
on A.id = B.id
WHERE B.id is null ;

Jacques.

"Nicolas LETULLIER" a écrit dans le
message de news:
Bonjour,

Contrairement à mySQL, on ne peut limiter le résultat qu'aux "n" premières
lignes, et non pas commencer à partir d'une certaine

SELECT TOP n * FROM matable

Nicolas.



"JeromF" a écrit dans le message de
news:bqk8ec$8rs$
> Bonjour,
>
> J'aimerais savoir si quelqu'un sait comment, dans un SELECT, on peut
> choisir un groupe de résultat.
> L'équivalent de la clause LIMIT avec MySQL en fait.
>
> Merci d'avance,
>
> --
> Jérôme
>
>




Avatar
JeromF
En fait, avec MySQL, tu peux faire SELECT * FROM table LIMIT(5,10)
Cela signifie que tu choisis 10 lignes à partir de la 5e.




"VUILLERMET Jacques" a écrit dans le message
de news:
Je ne connais pas LIMIT de MySQL mais si l'objectif est de ramener
uniquement les enregistrements de n à m d'un recordset alors il est


peut
être dommage de passer par une boucle et non pas par de


l'ensemblisme.

Je propose (sans l'avoir testé !) :
- SELECT TOP n
- SELECT TOP m
puis jointure externe entre les 2 pour ramener les lignes du 1er


SELECT qui
ne sont pas dans le second.

Cela pourrait donner en grossier :

SELECT ...
FROM
(SELECT TOP n ...FROM...) A
left outer join
(SELECT TOP m id, ... FROM...) B
on A.id = B.id
WHERE B.id is null ;

Jacques.

"Nicolas LETULLIER" a écrit dans


le
message de news:
> Bonjour,
>
> Contrairement à mySQL, on ne peut limiter le résultat qu'aux "n"


premières
> lignes, et non pas commencer à partir d'une certaine
>
> SELECT TOP n * FROM matable
>
> Nicolas.
>
>
>
> "JeromF" a écrit dans le message de
> news:bqk8ec$8rs$
> > Bonjour,
> >
> > J'aimerais savoir si quelqu'un sait comment, dans un SELECT, on


peut
> > choisir un groupe de résultat.
> > L'équivalent de la clause LIMIT avec MySQL en fait.
> >
> > Merci d'avance,
> >
> > --
> > Jérôme
> >
> >
>
>




Avatar
.merlin
Hello,

SET ROWCOUNT 20
SELECT * FROM news ORDER BY news_id DESC
SET ROWCOUNT 0

Faire très attention à toujours remettre le rowcount à 0 sinon toutes les requêtes
subiront cette limitation (expérience vécue, on se sent bien con après avoir rejetté
la faute sur tous les autres ; )

.merlin
Avatar
Fred BROUARD
Pour paginer avec SQL Server, le mieux est de faire ceci :

SELECT Top n ...
FROM ...
...
WHERE LaClef > :x
ORDER BY ..

Ou x est un paramètre valant MIN(LaClef) au départ

puis dans ton client récupérer dans le jeu de données la dernière valeur
clef (en fait la valeur clef de la dernière ligne) et de réinjecter
cette valeur dans la variable x !

Simple et peut couteux !

A+


JeromF a écrit:
Bonjour,

J'aimerais savoir si quelqu'un sait comment, dans un SELECT, on peut
choisir un groupe de résultat.
L'équivalent de la clause LIMIT avec MySQL en fait.

Merci d'avance,

--
Jérôme





--
Frédéric BROUARD - expert SQL, spécialiste : SQL Server / Delphi / web
Livre SQL - col. Référence : http://sqlpro.developpez.com/bookSQL.html
Le site du SQL, pour débutants et pros : http://sqlpro.developpez.com
****************** mailto: ******************
Avatar
JeromF
Mais cela équivaut à faire un SELECT TOP 20 news, non?

".merlin" a écrit dans le message de
news:

Hello,

SET ROWCOUNT 20
SELECT * FROM news ORDER BY news_id DESC
SET ROWCOUNT 0

Faire très attention à toujours remettre le rowcount à 0 sinon


toutes les requêtes
subiront cette limitation (expérience vécue, on se sent bien con


après avoir rejetté
la faute sur tous les autres ; )

.merlin





Avatar
VUILLERMET Jacques
J'ai compris.
Ma proposition tiens donc toujours.

Jacques.

"JeromF" a écrit dans le message de news:
bqklvt$i7b$
En fait, avec MySQL, tu peux faire SELECT * FROM table LIMIT(5,10)
Cela signifie que tu choisis 10 lignes à partir de la 5e.




"VUILLERMET Jacques" a écrit dans le message
de news:
> Je ne connais pas LIMIT de MySQL mais si l'objectif est de ramener
> uniquement les enregistrements de n à m d'un recordset alors il est
peut
> être dommage de passer par une boucle et non pas par de
l'ensemblisme.
>
> Je propose (sans l'avoir testé !) :
> - SELECT TOP n
> - SELECT TOP m
> puis jointure externe entre les 2 pour ramener les lignes du 1er
SELECT qui
> ne sont pas dans le second.
>
> Cela pourrait donner en grossier :
>
> SELECT ...
> FROM
> (SELECT TOP n ...FROM...) A
> left outer join
> (SELECT TOP m id, ... FROM...) B
> on A.id = B.id
> WHERE B.id is null ;
>
> Jacques.
>
> "Nicolas LETULLIER" a écrit dans
le
> message de news:
> > Bonjour,
> >
> > Contrairement à mySQL, on ne peut limiter le résultat qu'aux "n"
premières
> > lignes, et non pas commencer à partir d'une certaine
> >
> > SELECT TOP n * FROM matable
> >
> > Nicolas.
> >
> >
> >
> > "JeromF" a écrit dans le message de
> > news:bqk8ec$8rs$
> > > Bonjour,
> > >
> > > J'aimerais savoir si quelqu'un sait comment, dans un SELECT, on
peut
> > > choisir un groupe de résultat.
> > > L'équivalent de la clause LIMIT avec MySQL en fait.
> > >
> > > Merci d'avance,
> > >
> > > --
> > > Jérôme
> > >
> > >
> >
> >
>
>