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 :

Sélectionner un seul tuple


Sujet :

Langage SQL

  1. #1
    Membre émérite
    Avatar de Antoine_935
    Profil pro
    Développeur web/mobile
    Inscrit en
    Juillet 2006
    Messages
    883
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur web/mobile

    Informations forums :
    Inscription : Juillet 2006
    Messages : 883
    Par défaut Sélectionner un seul tuple
    Salut à toutes et à tous

    Me voici à nouveau à l'assaut d'une application web. Et comme d'hab, la voici à nouveau à l'assaut de moi-même avec une question qui reste:
    Comment sélectionner un seul tuple ?

    Il existe bien la solution du LIMIT, mais ce n'est pas du SQL standard, si je ne me trompe pas. Sur quels sgdb est-il disponible, et quelles sont les alternatives possibles ?

  2. #2
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 454
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 454
    Par défaut
    Je ne les connais pas tous mais en voici quelques uns :
    • LIMIT 1 pour MySQL.
    • SELECT TOP 1 pour SQL Server (MS & Sybase)
    • WHERE rownum = 1 pour Oracle

  3. #3
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    22 009
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 22 009
    Billets dans le blog
    6
    Par défaut
    Aucune de ces solution n'est normalisée.
    La seule qui le soit est de passer par une fonction de fenêtrage comme ROW_NUMBER :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    SELECT *
    FROM (SELECT *, ROW_NUMBER() OVER(..) AS N
          FROM MaTable) AS T
    WHERE N = 1
    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  4. #4
    Membre émérite
    Avatar de Antoine_935
    Profil pro
    Développeur web/mobile
    Inscrit en
    Juillet 2006
    Messages
    883
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur web/mobile

    Informations forums :
    Inscription : Juillet 2006
    Messages : 883
    Par défaut
    Salut à tous les deux.

    Waldar, merci pour ces quelques solutions, je les conserve précieusement.
    SQLPro, j'avais déjà vu cette solution dans un autre de tes posts:
    http://www.developpez.net/forums/d47...-plus-recents/

    Hélas, MySQL, qui est si répandu, ne semble pas supporter cette fonction row_number. Y a-t-il des workaround's ?

  5. #5
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    22 009
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 22 009
    Billets dans le blog
    6
    Par défaut
    Aucun. Vous devrez faire cela das le code client, sauf à utiliser LIMIT qui est spécifique à MySQL !

    Pour rappel, voici quels sont quelques unes des limitations de MySQL :
    SLQ pauvre :
    - pas de domaines
    - pas de schémas SQL
    - pas de requêtes récursives
    - pas d'opérateur ensemblistes comme INTERSECT ou EXCEPT
    - pas d'expression de tables (CTE)
    - pas de fonctions de fenêtrage
    - pas de groupage OLAP
    - contraintes dépendantes du moteur
    et pour couronner le tout la fameuse date 0000-00-00 qui constitue un bug irréfragable

    En plus de ne pas être gratuit, comme beaucoup le pense !

    Au moins sur PostGreSQL, c'est gratuit et en plus c'est libre et contient tout cela !


    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  6. #6
    Membre émérite
    Avatar de Antoine_935
    Profil pro
    Développeur web/mobile
    Inscrit en
    Juillet 2006
    Messages
    883
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur web/mobile

    Informations forums :
    Inscription : Juillet 2006
    Messages : 883
    Par défaut
    Eh bien, je ne savais pas que MySQL souffrait d'autant de limitations. Merci à vous pour ces infos très intéressantes !

    Je passerais bien volontier à un autre sgdb, mais je développe actuellement une petite application tout public en PHP. Interdiction donc d'ignorer MySQL.

    Merci aussi d'avoir relevé ce détail concernant la date, ça m'évitera des bugs.

  7. #7
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    22 009
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 22 009
    Billets dans le blog
    6
    Par défaut
    Citation Envoyé par Antoine_935 Voir le message
    Je passerais bien volontier à un autre sgdb, mais je développe actuellement une petite application tout public en PHP. Interdiction donc d'ignorer MySQL.
    PostGreSQL et SQL Server fonctionnent très bien avec PHP et même Microsoft à éditer des bibliothèques de code gratuites pour aider les développeurs PHP à utiliser SQL Server (la version gratuite étant limitée à des bases de moins de 4 Go).
    http://www.microsoft.com/france/visi...3-ee35bc1eef55
    Voir ZEND !

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  8. #8
    Membre émérite
    Avatar de Antoine_935
    Profil pro
    Développeur web/mobile
    Inscrit en
    Juillet 2006
    Messages
    883
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur web/mobile

    Informations forums :
    Inscription : Juillet 2006
    Messages : 883
    Par défaut
    Ah, un lien intéressant J'y jetterai un oeuil de suite.
    Mais quand je dis "grand public", ça signifie "le quidam qui va prendre un hébergement mutualisé en ligne". Or, sur ce type d'hébergement, on a en général... MySQL.

  9. #9
    Membre extrêmement actif
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    690
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Juillet 2005
    Messages : 690
    Par défaut
    SELECT *
    FROM (SELECT *, ROW_NUMBER() OVER(..) AS N
    FROM MaTable) AS T
    WHERE N = 1
    ca n'a pas l'air de marcher sur ASE (sybase), il ne reconnait ni ROW_NUMBER() ni OVER()

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

Discussions similaires

  1. [MySQL] Fonction qui sélectionne un seul utilisateur
    Par nivea_man2 dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 27/12/2008, 04h07
  2. [JTable] Sélectionner 1 seule cellule
    Par jojodu31 dans le forum Composants
    Réponses: 4
    Dernier message: 29/05/2008, 19h10
  3. incrementer un seul tuple a la fois
    Par kenny49 dans le forum Requêtes
    Réponses: 2
    Dernier message: 03/07/2006, 18h12
  4. [MySQL] updater un seul tuple a la fois+increment de la cle
    Par kenny49 dans le forum Langage SQL
    Réponses: 1
    Dernier message: 03/07/2006, 13h13
  5. [MSSQL] Problème pour sélectionner une seule occurence
    Par Tinfolley dans le forum Langage SQL
    Réponses: 4
    Dernier message: 02/07/2004, 10h02

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