我有一个包含两列主键的表。我想基于两个输入数组检索一组行,每个数组对应一个主键列。
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中的每个索引,但我想知道什么会更有效。
编辑:实际上不同会解决我的问题,它只是根据我的输入值(t2 = 0中的所有值)来完成它
答案 0 :(得分: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))
答案 1 :(得分:0)
现在这个问题已经解决了。如果您有兴趣,可以给出答案。
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
http://forums.oracle.com/forums/thread.jspa?threadID=1083982&tstart=15