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 :

Requête avec ALL ?


Sujet :

Langage SQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé

    Profil pro
    Étudiant
    Inscrit en
    Mars 2013
    Messages
    118
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2013
    Messages : 118
    Par défaut Requête avec ALL ?
    Bonjour,

    Je n'arrive pas a écrire une requête.

    J'ai les tables suivantes :
    ABONNE (NUM_AB, NOM, PRENOM, VILLE, AGE, TARIF, REDUC)
    EXEMPLAIRE (NUMERO, DATE_ACHAT, PRIX, CODE_PRET, ETAT, ISBN)
    LIVRE (ISBN, TITRE, SIECLE, CATEGORIE)
    MOT_CLEF (MOT)
    EMPRUNT (NUM_AB, NUM_EX, D_EMPRUNT, D_RETOUR, D_RET_REEL, NB_RELANCE)
    CARACTERISE(ISBN, MOT)

    Et je dois donner l'isbn des livres caractérisés par exactement les mêmes mots clefs que l'ouvrage de numéro ISBN 0-8-7707-2.

    Je pensais qu'utiliser ALL allait me permettre de faire ça, comme ceci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    SELECT isbn
    FROM caracterise
    WHERE mot = ALL (SELECT mot FROM caracterise WHERE isbn = '0_8_7707_2');
    Malheureusement, cette requête ne me renvoie rien (alors qu'elle est sensée renvoyer quelque chose).

    Merci d'avance pour votre aide.

  2. #2
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Par défaut
    Bonjour,

    C'est normal : il n'existe aucune ligne pour laquelle la colonne Mot est égale simultanément à chacun des mots renvoyés par votre sous-requête.

    Dans votre cas, vous pouvez vous en sortir avec un NOT EXISTS et une sous requête corrélée, en cherchant les lignes pour lesquelles il n'existe pas une autre ligne ayant le même ISBN et dont le mot n'est pas dans la liste.

    Et pour approfondir le sujet, vous pouvez lire cet article de SQLPro sur la division relationnelle

  3. #3
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 138
    Par défaut
    C'est un problème qui s'apparente à la division relationnelle...
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  4. #4
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    2 955
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 2 955
    Par défaut
    je dois donner l'isbn des livres caractérisés par exactement les mêmes mots clefs
    C'est plus un problème de division relationnelle

    [edit]grillé

  5. #5
    Membre confirmé

    Profil pro
    Étudiant
    Inscrit en
    Mars 2013
    Messages
    118
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2013
    Messages : 118
    Par défaut
    Je vais jeter un oeil sur tout ça.

    Merci à vous.

  6. #6
    Membre confirmé

    Profil pro
    Étudiant
    Inscrit en
    Mars 2013
    Messages
    118
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2013
    Messages : 118
    Par défaut
    Vraiment pas évidement, j'ai mis 3 plombes a faire ça.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SELECT isbn
    FROM caracterise
    WHERE mot IN (SELECT mot FROM caracterise WHERE isbn = '0_8_7707_2')
    GROUP BY isbn
    HAVING COUNT(*) = (SELECT COUNT(DISTINCT mot) 
    		    FROM caracterise 
    		    WHERE isbn = '0_8_7707_2');
    J'espère que ça viendra avec la pratique.
    Si vous avez des exos pour s'entrainer, je suis preneur.

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

Discussions similaires

  1. Optimisation d'une requête avec UNION ALL
    Par jgfa9 dans le forum Requêtes
    Réponses: 11
    Dernier message: 01/08/2012, 22h53
  2. [AC-2003] Requête Union all avec nbre de colonnes différents
    Par souketou dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 12/05/2009, 15h40
  3. Requête avec l'expression Like
    Par Mvu dans le forum ASP
    Réponses: 3
    Dernier message: 02/09/2003, 10h39
  4. problème de requête avec jointures
    Par tinhat dans le forum Requêtes
    Réponses: 7
    Dernier message: 11/08/2003, 11h33
  5. Problème dans requête avec count()
    Par BadFox dans le forum Requêtes
    Réponses: 3
    Dernier message: 08/07/2003, 19h02

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