Mysql
 sql >> Base de données >  >> RDS >> Mysql

MySQL, REGEXP - Trouver les mots qui contiennent uniquement les lettres exactes suivantes

Le problème ici est que vous vérifiez la présence de l deux fois. C'est la même chose que... "Il contient un l . Oui, contient toujours un l ." Il ne vérifie pas deux d'entre eux. Voici une alternative...

SELECT word FROM us_6 WHERE
word REGEXP 'v' AND
word REGEXP 'l.*l' AND
word REGEXP 'e' AND
word REGEXP 'o' AND
word REGEXP 'y'

Cela devrait correspondre à tous les mots contenant un v , deux l 's, un e , un o , et un y .

Ainsi, à chaque autre occurrence de la même lettre, ajoutez simplement une autre lettre .* à la requête. Par exemple, lullaby nécessite la requête suivante :

    SELECT word FROM us_7 WHERE
    word REGEXP 'l.*l.*l' AND
    word REGEXP 'u' AND
    word REGEXP 'a' AND
    word REGEXP 'b' AND
    word REGEXP 'y'

Regarde comment j'ajoute 3 *.l car il y a 3 occurrences de l dans le mot lullaby .

La même chose peut également être accomplie avec LIKE au lieu de REGEXP . Voici une requête équivalente à la question d'origine...

SELECT word FROM us_6 WHERE
word LIKE '%v%' AND
word LIKE '%l%l%' AND
word LIKE '%e%' AND
word LIKE '%o%' AND
word LIKE '%y%'