MySQL IN с как - PullRequest
       31

MySQL IN с как

3 голосов
/ 17 сентября 2010

Как бы я использовал таблицу IN с лайками? Чтобы я мог использовать% в них? Под я имею в виду:

SELECT fields 
  FROM table 
 WHERE age = "50" 
   AND name IN ("tim", "bob", "nancy", "john");

Я уже пробовал:

SELECT fields 
  FROM table 
 WHERE age = "50" 
   AND name LIKE ("2010-09-17%", "2010-09-16%")

Но выдает ошибку «Операнд должен содержать 1 столбец (и)»

Ответы [ 3 ]

9 голосов
/ 17 сентября 2010

Вы можете использовать несколько выражений LIKE:

SELECT fields 
  FROM table 
  WHERE age = "50" 
        AND (
             name LIKE "2010-09-17%" 
             OR name LIKE "2010-09-16%"
            );

или вы можете использовать регулярное выражение:

SELECT fields 
  FROM table 
 WHERE age = "50" 
       AND name REGEXP "2010-09-17.*|2010-09-16.*";

или, умно

SELECT fields 
  FROM table 
 WHERE age = "50" 
       AND name REGEXP "2010-09-1(6|7).*";
5 голосов
/ 17 сентября 2010

Нет сочетаний предложений LIKE и IN.Это либо один, либо другой синтаксис:

SELECT fields
  FROM table
 WHERE age = 50
   AND (   name IN ('tim', 'bob', 'nancy', 'john')
        OR name LIKE '2010-09-17%'
        OR name LIKE '2010-09-16%')

Альтернатива, которую следует учитывать при поиске текста: Полнотекстовый поиск (FTS) :

SELECT fields
  FROM table
 WHERE age = 50
   AND MATCH(name) AGAINST('tim bob nancy john')

.... но для этого требуются таблицы MyISAM и полнотекстовое индексирование.

1 голос
/ 17 сентября 2010

Поместите значения в таблицу (MyParamsTable) и используйте LIKE в условии JOIN, например. что-то вроде:

SELECT fields 
  FROM table 
       INNER JOIN MyParamsTable
          ON table.name LIKE CONCAT(MyParamsTable.name, "%")
 WHERE age = "50";
...