Мой запрос выглядит следующим образом и хорошо работает:
select *
from table t
where (t.one,t.two,t.three) in ( (11,12,13), (21,22,23) );
Теперь число этих триплетов в операторе in
будет меняться, поэтому я пытаюсь сделать следующее с JDBC:
String sql = "select * from table where (one, two, three) in (select * from unnest(?::smallint[], ?::integer[], ?::integer[]))"
// conn is the java.sql.Connection
PreparedStatement ps = conn.prepareStatement(sql);
ps.setArray(1, conn.createArrayOf("smallint", new Short[]{11, 21}));
ps.setArray(2, conn.createArrayOf("integer", new Integer[]{12,22}));
ps.setArray(3, conn.createArrayOf("integer", new Integer[]{13,23}));
return ps;
И это ужасно плохо. Так есть ли способ отправить триплеты с использованием jdbc так, чтобы конечный результат был эквивалентен SQL-запросу?
У меня было бы два индекса btree, один на one, two
, а другой на one, three
Мне нужноиспользуйте любой из них, чтобы сделать этот исполнитель