【发布时间】:2016-06-20 15:01:34
【问题描述】:
我有一个包含几列的表 A:
A B C
1 2 7
1 2 8
2 2 1
1 3 1
我必须在 Java 中构建一个函数,它接受 3 个向量作为输入,vA、vB、vC,并返回具有向量中任何值的行。数组用作过滤器。 A = {1,2,3,4}, b = {2}, C={7} 将返回一行,但 A = {1}, b = {2}, C={0} 不会,因为 c 列中没有行的值为 0
- 向量太大了,不可能像
WHERE (c = ? OR c = ? ...c = ? )那样生成很多OR - 必须避免 SQL 注入
- 性能至关重要
其他线程(https://stackoverflow.com/a/1532454/1991779),建议一个临时表,然后加入这些表。问题是我有几个向量来匹配几列而不是一个。我想我可以创建一个表,插入所有值,然后使用
WHERE A IN (SELECT A FROM TEMP ) AND B IN (SELECT B FROM TEMP ) AND C
IN (SELECT C FROM TEMP )
但是,我认为使用JOIN 而不是IN 会快得多。任何建议使用Join 而不是IN。
有什么建议吗?
【问题讨论】:
-
哪里可能存在,因为引擎在第一次出现时会停止查找。
-
In 只是创建一堆 OR 语句的简写(可能会带来小的性能提升,但我还没有经历过)。如果要使用连接,可以将要匹配的值转储到临时表中,然后将表连接到相关字段上的该临时表。
-
我应该如何在 tmp 表中插入值?每行不能有一个值,对吗?唯一的方法是做所有的排列,否则,连接会错过一些有效的情况吗?对吗