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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  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
    21 998
    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 : 21 998
    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
    21 998
    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 : 21 998
    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.

+ 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, 03h07
  2. [JTable] Sélectionner 1 seule cellule
    Par jojodu31 dans le forum Composants
    Réponses: 4
    Dernier message: 29/05/2008, 18h10
  3. incrementer un seul tuple a la fois
    Par kenny49 dans le forum Requêtes
    Réponses: 2
    Dernier message: 03/07/2006, 17h12
  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, 12h13
  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, 09h02

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