IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage SQL Discussion :

[SQL] SELECT avec tri et limite


Sujet :

Langage SQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de Resyek
    Inscrit en
    Juillet 2004
    Messages
    97
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 97
    Par défaut [SQL] SELECT avec tri et limite
    Bonjour à tous.

    J'ai un problème avec une requête SQL (Oracle 9) sur ma table des clients.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Clients : | IDCLIENT_PK  | NOM | PRENOM | ... |
    Je cherche à récupérer une liste de clients, que j'affiche 10 par 10 dans ma JSP (projet J2EE - Websphere). J'ai un problème lorsque je rencontre des doublons sur le NOM, puisque je n'arrive pas à ne retourner que les éléments 'non encore affichés'.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT * FROM CLIENTS
       WHERE nom like '%' and prenom like '%'
                  and nom >='memo_nom' and prenom >= 'memo_prenom'
       ORDER BY nom, prenom
    • - 'memo_nom' et 'memo_prenom' contiennent les noms et prénoms de l'entrée suivante de la liste retournée.
      - si je ne mets que nom >= 'memo_nom', il me renvoie certains éléments déjà affichés
      - avec nom >= X and prenom > Y, il exclue tous les éléments qui ont nom> X et prenom < Y
      - avec nom >= X or prenom > Y, il rajoute aussi des éléments non désirés.
      - la fonction "LIMITE" qui ferait bien mon affaire, n'existe pas sous oracle.


    Quelqu'un a une idée ? Je ne peux pas passer par la clé primaire 'IDCLIENT_PK' vu que sa numérotation ne correspond pas à l'ordre alphabétique.

  2. #2
    Membre confirmé Avatar de Resyek
    Inscrit en
    Juillet 2004
    Messages
    97
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 97
    Par défaut
    Entre temps, j'ai trouvé la réponse, je la poste ici pour aide.

    Comme les noms et prénoms peuvent aussi être identiques, il faut rajouter un élément sur le order by (IDCLIENT_PK)

    Requête "mentalement logique"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT * from CLIENT
        WHERE nom like '%' and prenom like '%' 
        AND nom > 'memo_nom'
        AND (nom = 'memo_nom' AND prenom > 'memo-prenom')
        AND (nom = 'memo_nom' AND prenom = 'memo_prenom' AND idclient > 'memo_idclient')
        ORDER BY nom, prenom, idclient
    Requête Optimisée
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT * from CLIENT
        WHERE nom like '%' and prenom like '%' 
        AND nom >= 'memo_nom'
        AND (nom > 'memo_nom' or prenom >= 'memo-prenom')
        AND (nom > 'memo_nom' OR prenom > 'memo_prenom' OR idclient >= 'memo_idclient')
        ORDER BY nom, prenom, idclient

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Problème requete SQL SELECT avec access
    Par cactus666 dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 12/12/2007, 12h46
  2. Réponses: 5
    Dernier message: 10/12/2007, 15h24
  3. [SQL] Select avec une constante
    Par eliek_9 dans le forum SQL
    Réponses: 5
    Dernier message: 11/05/2007, 18h26
  4. requette de selection avec tries
    Par Thierry8 dans le forum Langage SQL
    Réponses: 2
    Dernier message: 12/08/2005, 16h48
  5. select avec un nombre limité de valeurs retournées
    Par felix79 dans le forum Langage SQL
    Réponses: 5
    Dernier message: 23/12/2004, 15h16

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo