Уточнение поиска MySQL (заменить длинное регулярное выражение на подзапрос) - PullRequest
4 голосов
/ 22 июня 2009

У меня запрос MySQL

select query from HR_Health_Logs where query REGEXP 'CPU|MAC|PC|abacus|calculator|laptop|mainframe|microcomputer|minicomputer|machine';

За исключением того, что регулярное выражение намного длиннее и содержит много синонимов и орфографических ошибок.

Мне нужно сократить это и иметь таблицу со всеми синонимами и орфографическими ошибками, чтобы я мог избежать этого очень длинного запроса. Поэтому я ищу что-то вроде

select query from HR_Health_Logs where query REGEXP '**HAVE A TABLE WITH ALL MY SYNONYMS AND MISSPELLINGS SEARCHED HERE**';

Ответы [ 3 ]

3 голосов
/ 22 июня 2009

Как насчет функции ANY ?

select query from HR_Health_Logs where query REGEXP ANY (SELECT spell FROM misspelled WHERE correct = 'masturbate' ) ;
1 голос
/ 22 июня 2009
SELECT  query
FROM    HR_Health_Logs l, synonym s
WHERE   l.query = s.synonym
0 голосов
/ 22 июня 2009
SELECT query
FROM HR_Health_Logs
WHERE query IN (
  SELECT synonym AS query
  FROM synonyms_table
  WHERE word = 'masturbation'
  UNION
  SELECT misspelling AS query
  FROM misspellings_table
  WHERE word = 'masturbation'
)

Предполагая, что ваши синонимы и орфографические ошибки находятся в двух отдельных таблицах. В противном случае вы будете использовать только один из подзапросов и сбросите UNION.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...