odp.net SQL查询从两个输入数组中检索一组行

odp.net SQL查询从两个输入数组中检索一组行,sql,oracle,odp.net,Sql,Oracle,Odp.net,我有一个主键由两列组成的表。我想基于两个输入数组检索一组行,每个数组对应一个主键列 select pkt1.id, pkt1.id2, ... from PrimaryKeyTable pkt1, table(:1) t1, table(:2) t2 where pkt1.id = t1.column_value and pkt1.id2 = t2.column_value 然后在odp.net中用两个int[]绑定这些值 这将返回结果行的所有不同组合。因此,如果我预期有13行,我会收到169

我有一个主键由两列组成的表。我想基于两个输入数组检索一组行,每个数组对应一个主键列

select pkt1.id, pkt1.id2, ... from PrimaryKeyTable pkt1, table(:1) t1, table(:2) t2
where pkt1.id = t1.column_value and pkt1.id2 = t2.column_value
然后在odp.net中用两个int[]绑定这些值

这将返回结果行的所有不同组合。因此,如果我预期有13行,我会收到169行(13*13)。问题是t1和t2中的每个值都应该链接。值t1[4]应与t2[4]一起使用,而不是t2中的所有不同值

使用distinct解决了我的问题,但我想知道我的方法是否错了。有人对如何以最好的方式解决这个问题有什么建议吗?一种方法可能是使用for循环按顺序访问t1和t2中的每个索引,但我想知道什么更有效


编辑:实际上distinct并不能解决我的问题,它只是根据我的输入值(t2=0中的所有值)来做的。

假设您想要两个表中键所在的任何位置的所有行

select pkt1.id, pkt1.id2, ... 
from PrimaryKeyTable pkt1
where pkt1.id in (select column_value from table(:1)) 
and pkt1.id2 in (select column_value from table(:2)) 

这个问题现在解决了。如果你感兴趣,下面是答案

select id1, id2 from t, (select rownum rn1, a1.* from table(:1) a1) a1, (select rownum rn2, a2.* from table(:2) t2) t2 where (id1, id2) in ((a1.column_value, a2.column_value)) and rn1 = rn2

我想将结果压缩到绑定表中的某个位置。所以表(:1)中的索引4与表(:2)中的索引4相关。我想知道是否有任何不使用pl/sql和for循环的方法可以做到这一点