MySQL подготовил оператор, используя IN - PullRequest
2 голосов
/ 22 декабря 2010

Я хочу выполнить подготовленный оператор наподобие


prepare stmt1 from 'select * from tags where name in <b>(?)</b>'

set @a='tag1, tag2' ;

execute stmt1 using @a ;

Но, увы, он не работает должным образом (кажется, что аргумент для in рассматривается как одна строка).1006 * Можно ли сформировать такой список, используя in в подготовленном утверждении?

Ответы [ 2 ]

3 голосов
/ 22 декабря 2010

Короче, нет.

Базовый запрос, который вы пытаетесь выполнить, это select * from foo where bar in ('tag1, tag2'), что означает, что он соответствует строке 'tag1, tag2' и не рассматривается как список.

К сожалению, с in вам обычно нужно выполнять динамические запросы. Другими параметрами являются UDF, который анализирует строку, или временная таблица, к которой вы присоединяетесь.

1 голос
/ 22 декабря 2010

Нет. Вы можете построить SQL динамически (используя, например, CONCAT) и затем выполнить его.

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

prepare stmt1 from 'select * from tags where name in (?, ?)'

set @a='tag1';
set @b='tag2';

execute stmt1 using @a, @b;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...