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 :

Mots contenant certaines lettres


Sujet :

Langage SQL

  1. #1
    Membre chevronné Avatar de themadmax
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    446
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 446
    Par défaut Mots contenant certaines lettres
    Bonjour,
    Je n'ai jamais été fort en requêtes SQL, et là je colle devant mon problème.
    J'ai une table qui contient la relation entre des lettres et un index (vers leurs mots):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    lettre | id
    a | 10
    b | 10
    a | 11
    c | 12
    Chaque lettre de chaque mot est dans cette table. Si je fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT * FROM table WHERE letter = 'a';
    Je récupère tous les mots contenant un 'a'.
    Maintenant, j'aimerais récupérer tous les mots contenant une liste de lettres. Par exemple rechercher les mots contenant les lettres y,sa,so. J'ai fait cela mais ça ne fonctionne pas
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT * from table WHERE letter = 'y' OR letter = 'a' OR letter = 'o' GROUP BY word ;
    Comment je peux faire ? Merci d'avance.

  2. #2
    Membre Expert Avatar de lola06
    Femme Profil pro
    Consultante en Business Intelligence
    Inscrit en
    Avril 2007
    Messages
    1 316
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 38
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Consultante en Business Intelligence
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 316
    Par défaut
    Bonjour,

    Ta requête ne doit pas être complète car ici tu récupères les lettres et identifiants des mots et non les mots.

    Il faudrait que tu précises pourquoi ça ne fonctionne pas.

    Déjà tu as mis un group by alors que tu n'as pas de fonction d'agrégat. Je pense qu'une lecture des tutoriels de base serait un plus.

    Sinon il vaut mieux utiliser IN :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Select *
    From MaTable
    where letter IN ('a','y','o')

  3. #3
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 132
    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 132
    Par défaut
    Si tu cherches les mots qui contiennent ces trois lettres, il ne te manque plus grand'chose...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT  word
    FROM    TABLE
    WHERE   letter in ('y', 'a', 'o')
    GROUP BY word
    HAVING COUNT(DISTINCT letter) = 3
    ;
    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
    Membre chevronné Avatar de themadmax
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    446
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 446
    Par défaut
    Bon j'ai réussit a faire une requête qui retourne ce que je veux, avec des SELECT imbriqués:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    SELECT * FROM words WHERE length = 5 AND rowid IN 
    ( SELECT word FROM idx WHERE letter = 'y' AND word IN 
    	( SELECT word FROM idx WHERE letter = 'a' AND word IN
    		( SELECT word FROM idx WHERE letter = 'h' AND word IN
    			( SELECT word FROM idx WHERE letter = 'o' )
    		)
    	)
    );
    J'ai testé vos requête mais j'ai l'impression qu'elle ne font pas un AND. En tout cas si vous avez plus simple je suis preneur car pour générer ce type de requête c'est pas très simple...

    Merci

  5. #5
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 173
    Par défaut
    Bonjour,


    la requete de Al1_24 fait ce que vous demandez

  6. #6
    Membre chevronné Avatar de themadmax
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    446
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 446
    Par défaut
    Ah oui ! autant pour moi et cela à l'air d’être plus rapide en plus

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT * FROM words WHERE length = 5 AND rowid IN ( 
    SELECT word 
    FROM idx 
    WHERE letter IN ( 'y', 'a', 'o', 'h' ) 
    GROUP BY word 
    HAVING COUNT(DISTINCT letter) = 4);
    me retourne bien que "yahoo" !

    un grand MERCI !

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

Discussions similaires

  1. Programme pour supprimer les mots contenant la lettre "i"
    Par LerikalBless dans le forum Pascal
    Réponses: 8
    Dernier message: 13/05/2015, 18h40
  2. [RegEx] mots contenant certaines lettres
    Par neko33 dans le forum Langage
    Réponses: 2
    Dernier message: 28/04/2008, 08h59
  3. Réponses: 17
    Dernier message: 31/07/2007, 16h23
  4. Recherche sur mots de 3 lettres
    Par mamizo dans le forum Bases de données
    Réponses: 7
    Dernier message: 16/02/2005, 14h59
  5. Recherche des mots contenant ...
    Par Asdorve dans le forum Langage SQL
    Réponses: 3
    Dernier message: 18/06/2004, 10h23

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