0

我们的旧系统有T带有复合键的表 - 两列AB我需要搜索符合我的条件的行,即A == x AND B == y.

但是对于一组类似的(x,y)东西{(x1,y1), (x2,y2), (x3,y3)}

如果我这样做X = {x1,x2x3}并且Y = {y1,y2,y3}

select A,B,value from T where A in (X) and B in (Y)

我的结果可能包含 row x1, y2, valueN,但这是不正确的

我没有 touples 计数的上限,我需要将它作为 Java 代码中的参数传递。

我的服务器是 MS SQL 2008

看起来表值参数可能是答案,但 JDBC 驱动程序尚不支持

(希望这足够清楚)

4

2 回答 2

0

有几种解决方案:

使用检查组合的语句:

SELECT A, B, value FROM T WHERE A = X1 AND B = Y1 OR A = X2 AND B = Y2

使用准备好的语句并单独查询每个组合(注意:在此处使用 Java 7 try-with-resources)

try (PreparedStatement pstmt = con.prepareStatement("SELECT A, B, value FROM T WHERE A = X1 AND B = Y1")) {
  for (Tuple tuple : tuples) {
    pstmt.setObject(1, tuple.X);
    pstmt.setObject(2, tuple.Y);
    try (ResultSet rs = pstmt.executeQuery()) {
      while (rs.next()) {
        // process however you like
      }
    }
  }
}
于 2012-09-08T08:44:27.447 回答
0

您可以使用的一种技巧是将值转换为字符串并将它们连接起来

于 2012-09-06T09:44:46.737 回答