准备好的语句和IN表达式

时间:2009-10-17 01:56:03

标签: sqlite prepared-statement

我有一个数据库,用户可以在其中搜索包含一个或多个项目列表的记录。我正在使用IN进行搜索,但我无法使用IN来处理预准备语句。这就是我尝试过的:

SELECT * FROM tbl1 WHERE col IN (?)

但是,准备好的声明将我传递的项目列表视为单个项目。我怎样才能做到这一点?

我正在使用sqlite,如果它有任何区别。

2 个答案:

答案 0 :(得分:5)

你不能这样做,因为你不能绑定到数组。

您必须分两步完成:

  1. 用一个'?'创建SQL数组或列表中的每个值。
  2. 遍历数组或列表并绑定每个值。
  3. 无论数据库如何,都是如此。

    您没有说明子SELECT是否可以成为更好的解决方案,但如果相关值在另一个表中可用,也许可以使其工作。

答案 1 :(得分:2)

您可以使用临时表和子查询:

CREATE TEMP TABLE cols (col integer primary key);
INSERT INTO cols VALUES (23);
INSERT INTO cols VALUES (25);
INSERT INTO cols VALUES (28);

SELECT * FROM tbl1 WHERE col IN (select col from cols);

DROP TABLE cols ;