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 :

requette pour récuperer les clefs d'une table


Sujet :

Langage SQL

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    111
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mars 2006
    Messages : 111
    Points : 44
    Points
    44
    Par défaut requette pour récuperer les clefs d'une table
    Bonjour,
    en fait le titre dis tout et je suis sur que la réponse est basique, mais ne trouvant pas sur le net, je pose la question...
    Y a-t-il une requete SQL qui permet, a partir du nom d'une table, de retourner ses clef?

    merci d'avance...

  2. #2
    Membre expert
    Homme Profil pro
    Retraité
    Inscrit en
    Octobre 2005
    Messages
    1 473
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 65
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Finance

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1 473
    Points : 3 283
    Points
    3 283
    Par défaut
    La réponse est oui ...

    L'information est présente dans le catalogue du SGBD qui contient des informations sur la structure et les contraintes des bases applicatives.
    On parle alors de métadonnées.

    Le catalogue est lui-même sous forme de tables.

    Le problème est que chaque SGBD possède sa propre définition du catalogue, avec même des variantes selon les systèmes d'exploitation et les versions.

    Votre question s'applique à quel SGBD et à quel OS ?

  3. #3
    Inactif   Avatar de Médiat
    Inscrit en
    Décembre 2003
    Messages
    1 946
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 946
    Points : 2 227
    Points
    2 227
    Par défaut
    Il existe aussi une solution normée, mais pas disponible avec tous les moteurs :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SELECT column_name
    FROM Information_Schema.Table_Constraints c 
         INNER JOIN Information_Schema.Key_Column_Usage k ON k.Table_Name      = c.Table_Name
    		                                               AND k.constraint_name = c.constraint_name
    WHERE c.Table_Name = 'TA_TABLE'
      AND Constraint_Type = 'PRIMARY KEY'
    ORDER BY k.Ordinal_Position

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    111
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mars 2006
    Messages : 111
    Points : 44
    Points
    44
    Par défaut
    Alors voila, j'ai un peu modifié la requette, mais lors que je met ca:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT column_name FROM Information_Schema.Table_Constraints c
            INNER JOIN Information_Schema.Key_Column_Usage k ON k.Table_Name= c.Table_Name
            AND k.constraint_name = c.constraint_name WHERE c.Table_Name = 'species'
    	ORDER BY k.Ordinal_Position
    il me sort:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    speciesid
     
    speciesid
     
    organism
     
    organism
     
    classification
     
    classification
     
    speciesid
     
    speciesid
     
    organism
     
    organism
     
    classification
     
    classification
    Alors que j'attend :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    speciesid
    organism
    classification
    Pour la réponse précédente, je tourne sous linux mandriva 2006, mais comment connaitre l'autre information?

  5. #5
    Inactif   Avatar de Médiat
    Inscrit en
    Décembre 2003
    Messages
    1 946
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 946
    Points : 2 227
    Points
    2 227
    Par défaut
    Normal tu as oublié "AND Constraint_Type = 'PRIMARY KEY' " donc tu obtiens une ligne dans la vue Table_Constraints pour chacune des contraintes sur la table et non pour la PK seule...

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    111
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mars 2006
    Messages : 111
    Points : 44
    Points
    44
    Par défaut
    Dans le principe, je suis d'accord avec toi, mais dans ce cas, il me retourne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    speciesid
     
    speciesid
     
    speciesid
     
    speciesid
    ...

  7. #7
    Inactif   Avatar de Médiat
    Inscrit en
    Décembre 2003
    Messages
    1 946
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 946
    Points : 2 227
    Points
    2 227
    Par défaut
    Est-ce que tu as la même table dans plusieurs schémas ? Si oui, ajoute les contraintes de schéma dans la jointure et dans le where.

    Si tu as un doute, poste ici le résultat de :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT * 
    FROM Information_Schema.Table_Constraints 
    WHERE Table_Name = 'species'

  8. #8
    Membre expert
    Homme Profil pro
    Retraité
    Inscrit en
    Octobre 2005
    Messages
    1 473
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 65
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Finance

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1 473
    Points : 3 283
    Points
    3 283
    Par défaut
    C'est normal, par définition, une table n'a qu'une clé primaire ...

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    111
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mars 2006
    Messages : 111
    Points : 44
    Points
    44
    Par défaut
    effectivement... c'est pour ca que j'avais enlevé la ligne de contrainte, mais je peux faire comment pour récuperer toute les clef alors? j'ai tenté avec DISTINCT ou un group by, mais ca n'a pas l'air de marcher...

  10. #10
    Membre expert
    Homme Profil pro
    Retraité
    Inscrit en
    Octobre 2005
    Messages
    1 473
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 65
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Finance

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1 473
    Points : 3 283
    Points
    3 283
    Par défaut
    Citation Envoyé par mauroyb0
    effectivement... c'est pour ca que j'avais enlevé la ligne de contrainte, mais je peux faire comment pour récuperer toute les clef alors? j'ai tenté avec DISTINCT ou un group by, mais ca n'a pas l'air de marcher...
    C'est quoi pour vous une "clé" ?
    En dehors de la clé primaire bien sûr ...

  11. #11
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    111
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mars 2006
    Messages : 111
    Points : 44
    Points
    44
    Par défaut
    ... pour moi ce sont les différents nom des colonnes... effectivement, je me suis mal exprimé...

  12. #12
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    111
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mars 2006
    Messages : 111
    Points : 44
    Points
    44
    Par défaut
    Alors je vais reformuler... Comment est ce que je peux connaitre l'intitulé de chacune des collones f'une table dont je connais le nom?

  13. #13
    Inactif   Avatar de Médiat
    Inscrit en
    Décembre 2003
    Messages
    1 946
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 946
    Points : 2 227
    Points
    2 227
    Par défaut
    Il n'y a pas de bonne réponse à une mauvaise question !

    Si au lieu de reformuler tu avais cherché un peu dans le schéma INFORMATION_SCHEMA

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT COLUMN_NAME
    FROM INFORMATION_SCHEMA.COLUMNS
    WHERE TABLE_NAME = 'TA_TABLE'

  14. #14
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    111
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mars 2006
    Messages : 111
    Points : 44
    Points
    44
    Par défaut
    La réponse est nickel, merci beaucoup... Pour la peine, j'ai été étudier a fond la table INFORMATION_SCHEMA.COLUMNS parce que je crois effectivement que j'aurais pu trouver ca tout seul...

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

Discussions similaires

  1. pour supprimer les doublons d'une table qcq
    Par lamjed dans le forum Oracle
    Réponses: 7
    Dernier message: 19/12/2008, 16h42
  2. Problème pour lire les donnée d'une table externe
    Par mardoch dans le forum SQL*Loader
    Réponses: 6
    Dernier message: 17/07/2008, 16h41
  3. Réponses: 7
    Dernier message: 24/04/2008, 11h53
  4. Réponses: 4
    Dernier message: 22/05/2007, 14h42
  5. Probleme de requete pour remplir les champs d'une table
    Par Jim_Nastiq dans le forum Langage SQL
    Réponses: 7
    Dernier message: 06/04/2006, 14h56

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