Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

MySQL, REGEXP - Encontre palavras que contenham apenas as seguintes letras exatas


O problema aqui é que você está verificando a presença de l duas vezes. Isso é o mesmo que... "Ele contém um l . Sim, ainda contém um l ." Não está verificando dois deles. Aqui está uma 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'

Isso deve corresponder a todas as palavras que contêm um v , dois l 's, um e , um o , e um y .

Assim, a cada duas ocorrências da mesma letra, basta acrescentar outra .*letra à consulta. Por exemplo, lullaby precisa da seguinte consulta:
    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'

Veja como eu adiciono 3 *.l porque existem 3 ocorrências de l na palavra lullaby .

A mesma coisa também pode ser feita com LIKE em vez de REGEXP . Aqui está uma consulta equivalente para a pergunta original ...
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%'