进行从多列中选择值列表的 SQL 查询
Posted
技术标签:
【中文标题】进行从多列中选择值列表的 SQL 查询【英文标题】:Making a SQL query that selects of list of values from more than one column 【发布时间】: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 吗?
【参考方案1】:
使用IN
条件和列表中的多个表达式:
SELECT *
from table_name
where ( AccountNum, RoutingNum ) in ( ( 'A1', 'R1' ), ( 'A2', 'R2') )
【讨论】:
只是对我发现的使用“IN”的警告,对于 oracle,它的硬性限制是每次调用 1000 个条目。 @Snedden27 仅适用于单值列表;具有多个值的列表,例如这个,列表中最多可以有 100,000 个元素。 ***.com/a/17019130/1509264 嗯,这很好,知道,正在考虑批处理 sql,但这有帮助,谢谢以上是关于进行从多列中选择值列表的 SQL 查询的主要内容,如果未能解决你的问题,请参考以下文章