【发布时间】:2020-12-10 18:42:14
【问题描述】:
我有一张类似这样的桌子:
| AccountNum | Name | RoutingNum |
|---|---|---|
| a1 | name1 | r1 |
| a2 | name2 | r2 |
| a2 | name3 | r1 |
我想选择具有特定配对帐号和路由号码的所有行,例如:
input
List<accountNum, routingNumber> pairList = {<a1, r1>, <a2, r2>}
sql returns:
| AccountNum | Name | RoutingNum |
| -------- | -------------- |--------------
| a1 | name1 | r1 |
| a2 | name2 | r2 |
对于某些情况,我只想打一个电话,我将使用 jdbc 进行,这是我的 java 代码,它只选择帐号,这不是我想要的,因为我也想使用 routingNum 进行选择:
String inSql = String.join(",", Collections.nCopies(plainAccountNumberEntries.size(), "?"));
List<String>accountNumberList = Arrays.asList("a1", "a2");
return ddsJdbc.query(
String.format("SELECT * from table where AccountNum in (%s)", inSql),
accountNumberList.toArray(),
new someMapper()
);
我想避免为列表中的每个条目多次调用数据库。
感谢您的宝贵时间。
【问题讨论】:
-
这有点不清楚。您是否要求选择带有
((AccountNum="a1" and RoutingNum="r1") or (AccountNum="a2" and RoutingNum="r2"))的行?还是AccountNum in ("a1","a2") and RoutingNum in ("r1","r2"),它也会返回[a1,r2]和[a2,r1]行? -
对不起,如果是我要求返回 (AccountNum="a1" and RoutingNum="r1") 或 (AccountNum="a2" and RoutingNum="r2"))
-
好吧,有你
WHERE子句。如果您有可变数量的条件,则每次都必须动态构建语句。但请使用占位符 (?) 而不是构建值,以避免 SQL 注入。 -
我正在使用占位符,不是吗?还有你所说的 where 子句是什么意思,它是在 for 循环中生成单独的 sql 吗?