Mysql
 sql >> база данни >  >> RDS >> Mysql

? ХАРЕСВАНЕ (колона || '%')

Заявката:

SELECT * FROM table WHERE ? LIKE (col || '%');

може да се пренапише като (Postgres и MySQL):

SELECT * FROM table WHERE col = left(?, length(col));

Както беше коментирано, първата форма също трябва да работи. Може да е трудно обаче, защото символи със специално значение за LIKE (поне _%\ ) в колоната ще трябва да се избяга. Ако искате да работи както с MySQL, така и с Postgres, ще трябва да наблюдавате специалните знаци и в двете реализации. Така че втората форма е много по-малко податлива на грешки на главница.

Ефективност

Нито една от тези заявки не може да използва индекс на col , и двете не са саргируеми . Проблемът може да бъде преоценен като намиране на всички възможни префикси към дадения модел за търсене ? , който може да бъде оптимизиран по подобен начин като в този свързан отговор (за Postgres) на dba.SE:



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. как можем да променим стойността с помощта на радио бутони

  2. MySQL актуализира поле с нарастваща променлива

  3. Присъединете се с множество условия

  4. Mysql Невалиден формат за дата и час:1292 Неправилна стойност за дата и час при създаване на фиктивни данни за тестване

  5. Как да създадете израз if в ехо в PHP MySQLi