准备好的语句和 IN 表达式

发布于 2024-08-07 23:32:02 字数 219 浏览 5 评论 0原文

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

SELECT * FROM tbl1 WHERE col IN (?)

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

我正在使用 sqlite,如果它有什么区别的话。

I have a database where users can search for records that have one or more of a list of items. I'm using IN to do the search, but I can't get IN to work with prepared statements. This is what I've tried:

SELECT * FROM tbl1 WHERE col IN (?)

But the prepared statement treats the list of items I pass it as a single item. How can I make this work?

I'm using sqlite, if it makes any difference.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

就像说晚安 2024-08-14 23:32:02

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

您必须分两步完成:

  1. 使用一个“?”创建 SQL数组或列表中的每个值。
  2. 循环数组或列表并绑定每个值。

无论数据库如何,都是如此。

您没有说子 SELECT 是否是更好的解决方案,但如果有问题的值在另一个表中可用,也许它可以工作。

You can't do IN this way, because you can't bind to an array.

You have to do it in two steps:

  1. Create the SQL with one '?' per value in the array or list.
  2. Loop over the array or list and bind each value.

This is true regardless of database.

You don't say whether a sub-SELECT could be a better solution, but perhaps it could be made to work if the values in question were available in another table.

烟雨扶苏 2024-08-14 23:32:02

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

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 ; 

You can use a temp table and subquery:

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 ; 
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文