Как использовать подобную функцию в наборе данных в mysql?

есть ли способ использовать подобную функцию в наборе данных? я попытался выбрать * из таблицы 1, где столбец 1 похож ('%1%','%2%','%3%','%4%'); но это не сработало.

в моем сценарии есть 2 оператора выбора, такие как select * from class1, где firstname in (выберите имя из class2, где firstname = 'greg');

но вместо class1.firstname = class2.firstname я хотел, чтобы это было class1.firstname, например concat('%',class2.firstname,'%');


person Joseph Lafuente    schedule 09.01.2011    source источник
comment
Думали ли вы о нормализации вашей базы данных?   -  person Mark Byers    schedule 09.01.2011
comment
я думаю, я буду использовать функцию ИЛИ, так как это мой единственный вариант.   -  person Joseph Lafuente    schedule 09.01.2011


Ответы (4)


Вы можете «ИЛИ» их:

... WHERE (column1 like '%1%') OR (column1 like '%2%') OR ...
person Roman Starkov    schedule 09.01.2011

like принимает один аргумент

select * 
from table1 
where column1 like ('%1%'); 

если вы хотите проверить многих, используйте операторы OR или UNION

select * 
from table1 
where column1 like ('%1%')
or column1 like ('%2%'); 
person Randy    schedule 09.01.2011
comment
Обратите внимание, что UNION вернет строку со строкой 12 дважды — один раз для %1% и один раз для %2%. - person Ilya Kogan; 09.01.2011
comment
Насколько я знаю, UNION не удаляет повторяющиеся строки, это тот случай, когда вы используете UNION ALL. - person Jahan; 09.01.2011

Обычно вы используете функцию IN, когда у вас есть список строк для сравнения. Но здесь вам нужна комбинация LIKE и IN, и, насколько мне известно, в SQL нет функции, которая бы это делала, поэтому вам нужно будет использовать оператор OR.

person Ilya Kogan    schedule 09.01.2011

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

Другим вариантом является использование regex

person Jahan    schedule 09.01.2011
comment
думаю не буду рисковать. спасибо - person Joseph Lafuente; 09.01.2011