Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Anagramer słów z % sql

Najpierw chcę poprawić błąd w twoim pytaniu. W swoich zapytaniach masz na myśli _ nie % . % oznacza dowolną liczbę znaków (zero lub więcej). Użyj _ oznaczać dokładnie jeden znak.

Przejdźmy teraz do rozwiązania... właściwie nie potrzebujesz posortowanego słowa przechowywanego w bazie danych. Możesz po prostu zrobić to:

SELECT word
FROM dictionary
WHERE CHAR_LENGTH(word) = 6
AND word LIKE '%W%'
AND word LIKE '%O%'
AND word LIKE '%R%'
AND word LIKE '%D%'

Jeśli w danych wejściowych znajdują się zduplikowane litery, należy postępować z tym poprawnie, aby upewnić się, że wszystkie wyniki zawierają wszystkie zduplikowane litery. Na przykład, jeśli dane wejściowe to FOO__ musisz sprawdzić, czy każde słowo pasuje do obu %F% i %O%O% .

SELECT word
FROM dictionary
WHERE CHAR_LENGTH(word) = 5
AND word LIKE '%F%'
AND word LIKE '%O%O%'

Zauważ, że to podejście będzie wymagało pełnego skanowania tabeli, więc nie będzie szczególnie wydajne. Możesz nieco poprawić sytuację, przechowując długość każdego słowa w osobnej kolumnie i indeksując tę ​​kolumnę.

Jeśli masz sortedword wtedy możesz poprawić wydajność, pomijając % między zduplikowanymi literami, ponieważ wiesz, że pojawią się one kolejno w sortedword . Może to poprawić wydajność, ponieważ zmniejsza ilość cofania wymaganego w przypadku nieudanych meczów.

SELECT word
FROM dictionary
WHERE CHAR_LENGTH(word) = 5
AND sortedword LIKE '%F%'
AND sortedword LIKE '%OO%'

Kolejne podejście, które wymaga sortedword być obecnym w następujący sposób:

SELECT word
FROM dictionary
WHERE CHAR_LENGTH(word) = 5
AND sortedword LIKE '%D%O%R%W%'

Ponownie wymaga to pełnego skanowania tabeli. Ponownie, jeśli masz powtarzające się litery, nie potrzebujesz % między nimi.

SELECT word
FROM dictionary
WHERE CHAR_LENGTH(word) = 5
AND sortedword LIKE '%F%OO%'



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak monitorować metryki HAProxy za pomocą ClusterControl

  2. com.mchange.v2.resourcepool.CannotAcquireResourceException:ResourcePool nie może pozyskać zasobu z jego podstawowej fabryki lub źródła

  3. SQL Server odpowiednik MySQL'a USING

  4. Zlokalizuj pozycję tekstu, wyodrębnij tekst i wstaw w nowej kolumnie w MySQL

  5. Wyodrębnij dane z json w polu mysql