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 :

[MySQL] Une requête n'aboutissant pas


Sujet :

Langage SQL

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 35
    Points : 30
    Points
    30
    Par défaut [MySQL] Une requête n'aboutissant pas
    Pour créer une base de données, à un moment donné, j'ai la chose suivante :
    Un film est codé sur plusieurs pistes sonores et pour une piste sonore déterminée, cette dernière peut être présente sur plusieurs films.
    Bref, si l'entité/association de cette relation est :
    film --(1,n)----encoder-----(1,n)-- piste_sonore
    On déduit qu'il faut 3 tables :
    Film(NoFilm*, Titre)
    Piste_sonore(Intitule*)
    Encoder(NoFilm**, Intitule**)
    où * est la clef primaire et ** les clefs étrangères.
    Je souhaite écrire la requête sql suivante :
    Quels sont les films qui ont pour piste sonore "DTS" et "Stéréophonie" ?
    Alors j'ai écrit ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    select Titre from (select f.Titre, p.Intitule from film as f, encoder as e, piste_sonore as p
    where f.NoFilm = e.NoFilm
    and e.Intitule = p.Intitule
    and p.Intitule  = 'DTS') as sb
    where sb.Intitule =  'Stéréophonie'
    group by Titre
    order by 1 desc;
    Et cela n'aboutit pas ...
    Une idée ?
    Merci par avance.

  2. #2
    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 :
    sb.Intitule = 'Stéréophonie'
    p.Intitule = 'DTS'
    or
    p.Intitule = sb.Intitule, donc il faudrait que 'Stéréophonie' = 'DTS'.

    Essaye :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT Titre 
    FROM Encoder as e INNER JOIN Film as f USING (NoFilm)
    WHERE Intitule IN ('DTS', 'Stéréophonie')
    GROUP BY Titre 
    HAVING COUNT (Intitule) = 2
    ORDER BY 1 DESC
    PS : bizarre que tu considères le titre comme une clé de la table Film.
    J'affirme péremptoirement que toute affirmation péremptoire est fausse
    5ième élément : barde-prince des figures de style, duc de la synecdoque
    Je ne réponds jamais aux questions techniques par MP

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 35
    Points : 30
    Points
    30
    Par défaut
    Citation Envoyé par Médiat
    Normal :
    sb.Intitule = 'Stéréophonie'
    p.Intitule = 'DTS'
    or
    p.Intitule = sb.Intitule, donc il faudrait que 'Stéréophonie' = 'DTS'.

    Essaye :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT Titre 
    FROM Encoder as e INNER JOIN Film as f USING (NoFilm)
    WHERE Intitule IN ('DTS', 'Stéréophonie')
    GROUP BY Titre 
    HAVING COUNT (Intitule) = 2
    ORDER BY 1 DESC
    PS : bizarre que tu considères le titre comme une clé de la table Film.
    Merci Médiat, mais :
    Titre dans film n'est pas une clef puisque je n'ai pas mis d'*. La clef primaire de la table film est uniuqement NoFilm.
    La requête bloque, on me dit :
    Error: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '(Intitule) = 2
    ORDER BY 1 DESC' at line 6 (State:37000, Native Code: 428)

  4. #4
    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
    Citation Envoyé par Livingstone
    Merci Médiat, mais :
    Titre dans film n'est pas une clef puisque je n'ai pas mis d'*. La clef primaire de la table film est uniuqement NoFilm.
    Je n'ai pas dit que c'était la clé primaire, mais une clé.
    Si tu ne considères pas que le titre est un identifiant, alors il faut ajouter NoFilm dans le GROUP BY


    Citation Envoyé par Livingstone
    La requête bloque, on me dit :
    Error: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '(Intitule) = 2
    ORDER BY 1 DESC' at line 6 (State:37000, Native Code: 428)
    Je ne connais pas particulièrement mySQL et encore moins ta version, il est difficile de savoir si le problème viens du count(intitule) ou du ORDER BY 1

    Essaye
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    HAVING COUNT(*) = 2
    ORDER BY Titre
    J'affirme péremptoirement que toute affirmation péremptoire est fausse
    5ième élément : barde-prince des figures de style, duc de la synecdoque
    Je ne réponds jamais aux questions techniques par MP

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 35
    Points : 30
    Points
    30
    Par défaut
    Non, ça ne marche pas.
    Pourtant, je ne comprends pas, ce quue je souhaite obtenir ne me paraît pas si compliqué et je suis furieux contre moi.
    J'ai une table Film qui a un attribut "Titre" et sa clef primaire "NoFilm".
    J'ai une table Sonore qui a un seul attribut qui est en même temps clef primaire : Intitulé. Intitulé est : DTS, Dolby Digital, Dolby Surround, Stéréophonie.
    Et enfin une dernière table Encoder qui récupère la clef primaire de Film et celle de Sonore, donc Encoder a deux attributs.
    Ma requête est la suivante :
    Je veux la liste des films (leur titre) qui sont codés à la fois en DTS et en Stéréophonie. Pas moyen de trouver cette requête.
    Merci des deux premières réponses, mais ça ne marche pas ...

  6. #6
    Candidat au Club
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2002
    Messages : 3
    Points : 3
    Points
    3
    Par défaut Liste des films
    Si j'ai bien compris , çà doit ressembler à :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
     
    select F.Titre
    From Film
    join ( Select NoFilm
             From Encoder
             Where Intitule  in ( "DTS" , "Stéréophonie" )
             Group by NoFilm
             Having count(*) = 2 
           ) A
    ON A.NoFilm = F.NoFilm

  7. #7
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 35
    Points : 30
    Points
    30
    Par défaut
    Merci Jerome63.
    Ca fonctionne.
    Encore merci.

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

Discussions similaires

  1. continuer une boucle même si une requête ne fonctionne pas
    Par chamoxx dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 13/08/2008, 16h55
  2. Toutes les valeurs d'une requête ne sont pas traitées
    Par Lunaden dans le forum Requêtes
    Réponses: 2
    Dernier message: 02/06/2008, 16h03
  3. [SQL] Vérifier si une requête ne contient pas d'erreurs
    Par Sytchev3 dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 19/10/2007, 16h36
  4. Réponses: 3
    Dernier message: 02/12/2006, 16h10
  5. Réponses: 4
    Dernier message: 26/05/2006, 08h59

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