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 :

Reprise du SQL


Sujet :

Langage SQL

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 10
    Points : 7
    Points
    7
    Par défaut Reprise du SQL
    Bonjour à tous,

    Je reprend un peu le SQL et m'entraine durant les heures creuses =)

    Je me suis amusé à créer quelques petites tables pokémon mais je bloque encore sur les jointures.

    2 tables : une avec les pokemon et la deuxième avec des catégories (les types) (feu, etc)
    Dans mes relation, je pars sur du 1,n car chaque pokémon peut avoir un ou plusieur type comme un type peut être associé à un ou plusieurs pokemon.

    voici donc mes 3 tables (la 3ème étant donc la combinaison des clefs primaire des deux premières)

    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
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
     
    -- create
    CREATE TABLE pokemon(
      idPkmn int NOT NULL AUTO_INCREMENT,
      name VARCHAR(50),
      level INTEGER,
      PRIMARY KEY(idPkmn)
    );
     
    CREATE TABLE categorie(
      idCategorie int NOT NULL AUTO_INCREMENT,
      name VARCHAR(50),
      PRIMARY KEY(idCategorie)
    );
     
     
    CREATE TABLE asso(
      id int NOT NULL AUTO_INCREMENT,
      idPkmn int,
      idCategorie int,
      PRIMARY KEY(id),
      FOREIGN KEY(idPkmn) REFERENCES pokemon(idPkmn),
      FOREIGN KEY(idCategorie) REFERENCES categorie(idCategorie)
    );
     
     
    INSERT INTO pokemon (name,level) 
    VALUES
    ('salameche',25),
    ('pikachu',99),
    ('tignon',50),
    ('dracaufeu',99),
    ('chenipan',25),
    ('taupiqueur',75)
    ;
     
    INSERT INTO categorie(name)
    VALUES
    ('feu'),
    ('elec'),
    ('insect'),
    ('sol'),
    ('combat'),
    ('vol')
    ;
     
    INSERT INTO asso(idPkmn, idCategorie)
    VALUES
    (1,1),(2,2),(3,5),(4,1),(4,6),(5,3),(6,4);
    Jusque là tout vas bien.

    J'aurai besoin de votre avis quant à la meilleure manière d'appeler les pokémons avec les catégories feu et les pokémon avec la catégorie insect.

    j'ai tenté un début avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT * FROM pokemon
      INNER JOIN asso ON pokemon.idPkmn=asso.idPkmn
      INNER JOIN categorie ON pokemon.idPkmn=categorie.idCategorie;
    Merci =)

  2. #2
    Expert éminent
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 104
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 104
    Points : 8 219
    Points
    8 219
    Billets dans le blog
    17
    Par défaut
    La clef primaire de ta table asso devrait être composée des 2 clefs étrangères.
    Si tu tiens absolument à une clef primaire auto-incrémentée alors il faut au moins mettre une contrainte d'unicité sur les colonnes asso.(idPkm, idCategorie)

    Ta joinoture sur asso était incorrecte, il faut faire :

    SELECT DISTINCT p.name
    FROM pokemon AS p
    INNER JOIN asso AS a ON p.idPkmn = a.idPkmn
    INNER JOIN categorie AS c ON a.idCategorie = c.idCategorie
    WHERE c.name IN ('feu', 'insect');
    Un problème exposé clairement est déjà à moitié résolu
    Keep It Smart and Simple

Discussions similaires

  1. Pb requete, reprise PL SQL
    Par Cvanhove dans le forum PL/SQL
    Réponses: 11
    Dernier message: 13/11/2019, 11h15
  2. Reprise script PL/SQL
    Par decisio dans le forum PL/SQL
    Réponses: 5
    Dernier message: 28/06/2012, 14h33
  3. Pb migration Access / SQL server
    Par yoyo dans le forum MS SQL Server
    Réponses: 10
    Dernier message: 25/04/2005, 10h39
  4. Cours, tutoriels, logiciels, F.A.Q,... pour le langage SQL
    Par Marc Lussac dans le forum Langage SQL
    Réponses: 0
    Dernier message: 04/04/2002, 10h21

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