首页 > 解决方案 > 如何将对象或分组参数传递给 SQL IN 子句?

问题描述

我需要使用 JPA 通过匹配表中的 2 个分组参数来查找记录,但我的问题是我不知道如何在 SQL 中传递对象或分组参数,如果可能的话。

假设我们有 User 表:

USER_TABLE

name VARCHAR,
email VARCHAR,
address VARCHAR

我需要找到分组名称和电子邮件匹配的所有用户。像这样的东西:

SELECT FROM USER_TABLE 
WHERE (name, email) 
IN (('John', 'john@mail'), ('Oliver', 'oliver@mail'));

它在 SQL 工具中工作,但现在我需要从 Java 使用这个 SQL

为此,我对其进行了更新以接受参数

SELECT FROM USER_TABLE 
WHERE (name, email) 
IN (?);

所以我的问题是如何传递参数或将它们分组?

我试图创建一个参数,如下所示,但它不起作用,因为它不是有效类型

String param = "('John', 'john@mail'), ('Oliver', 'oliver@mail')";
db.execute(sql, param)

这有可能吗?

标签: javasqljpa

解决方案


你这样做:

SELECT FROM USER_TABLE 
WHERE (name, email) 
IN ((?, ?), (?, ?));

每个参数代替单个标量值,而不是值列表,也不是任何其他 SQL 语法(如括号)。您需要将所有括号放入准备好的语句中,然后仅对值使用参数。


推荐阅读