Mysql
 sql >> Database >  >> RDS >> Mysql

MySQL, REGEXP - Trova parole che contengono solo le seguenti lettere esatte

Il problema qui è che stai verificando la presenza di l due volte. È lo stesso di... "Contiene un l . Sì, contiene ancora un l ." Non ne sta controllando due. Ecco un'alternativa...

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'

Questo dovrebbe corrispondere a tutte le parole che contengono un v , due l 's, una e , un o e un y .

Quindi, ogni altra occorrenza della stessa lettera, basta aggiungere un'altra .*letter alla query. Ad esempio, lullaby necessita della seguente query:

    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'

Guarda come aggiungo 3 *.l perché ci sono 3 occorrenze di l nella parola lullaby .

La stessa cosa può essere realizzata anche con LIKE invece di REGEXP . Ecco una query equivalente per la domanda originale...

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%'