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), но это может быть так.