mysql: найти строки, у которых есть поле, которое является подстрокой "string"

Есть ли способ написать SQL-запрос, который находит все строки, где значение поля является подстрокой данной строки.

Пример:

table names

Name      |      Nickname
rohit            iamrohitbanga
banga            rohitnick
sinan            unur

запрос должен быть что-то вроде

select * from names where Name is a substring of "who is rohit";   // to get first row
select * from names where Nickname is a substring of "who is rohitnick";   // to get second row
select * from names where Name is a substring of "who is unur and banga"
or Nickname is substring of "who is unur and banga";   // to get second and third row

Как это возможно?

Если это невозможно, мне придется добиться такого поведения в Java. я использую драйвер jdbc:mysql для подключения к базе данных.

Обновите ваши решения работы

Теперь немного изгиба. если мы хотим проверить, встречается ли подстрока поля как подстрока указанной строки.

select * from names where Name is a substring of "who is sina";   // to get third row

4 ответа

Решение

Если один из Name или же Nickname должен быть найден в текстовом использовании

SELECT *
FROM names
WHERE instr("who is Rohit", Name) > 0
   OR instr("who is Rohit", Nickname) > 0

Для этого нельзя использовать индекс, поэтому для больших таблиц это может занять много времени.

Одна из проблем всех этих подходов заключается в том, что ваши индексы выходят прямо в окно. Вам придется выполнять сканирование таблицы для каждой строки, что означает, что ваша производительность будет только ухудшаться с ростом размера таблицы.

Я бы переосмыслил этот подход, если ваш стол будет большим. Может быть, вам нужен индексированный поисковик, как Lucene.

SELECT * FROM names WHERE INSTR(Nickname,Name) > 0;

или, что эквивалентно:

SELECT * FROM names WHERE LOCATE(Name,Nickname) > 0;

Вы также можете отменить условие LIKE.

select * from names where "who is rohit" LIKE  CONCAT('%', Name, '%');

Обратите внимание, что это, вероятно, не быстрее, чем instr("кто такой Rohit", Name), но это может быть так.

Другие вопросы по тегам