SQL:选择具有相同ID的多个行

时间:2017-02-06 06:58:37

标签: java postgresql jdbc

我有点问题。我有一个包含名称,ID和不同几何形状的表格,如下所示:

ID  |  Name| RealID| Geometry| 
==========================================
1   |      Hampshire     |   3   |  0762453...
2   |      Hampshire     |   3   |  0156245...
3   |      Salt Lake     |   2   |  312455...
4   |      Hampshire     |   3   |  016422....

我需要根据ID列表选择所有Hampshire行。你可以看到我的桌子有不同的几何形状,比如汉普郡。 我只需要通过比较我从列表中获得的一个ID就可以了解所有这些。

我从Java获取ID列表。到目前为止,它只是一个带有一个ID(3)的列表。

这样做:

Select * from table where RealID = any(:listOfIds)

如果我在列表中发送汉普郡的ID,它只返回我一行(3)。我尝试过这样的事情:

Select * from table where RealID IN (any(:listofids))

但语法错误,我不知道如何实现我的目标。

3 个答案:

答案 0 :(得分:1)

如果你想制作一些安全和干净的代码,你可以这样使用:

String query = "Select * from table where RealID IN (";

for (int i = 0; i < list.lenght(); i++) {
    query += (i == 0 ? "" : ", ") + "?";
}
query += ")";
PreparedStatement preparedStatement = dbConnection.prepareStatement(query);
for (int i = 0; i < list.lenght(); i++) {
    preparedStatement.setInt(i, list.get(i));
}
ResultSet rs = preparedStatement.executeQuery(query);
while (rs.next()) {
    //get your informations here
}

您应该循环抛出列表并使用PreparedStatement,因此您的查询应如下所示:

Select * from table where RealID IN(?, ?, ?, ?, ?)

这是安全的方式。

答案 1 :(得分:0)

您可以尝试以下语法

SELECT * FROM table WHERE RealID in (listOfIDs)

例如:

SELECT * FROM table WHERE RealID in (3,2,6....)

你也可以试试这个:

SELECT * FROM table WHERE FIND_IN_SET('3', RealID);

答案 2 :(得分:0)

你可以尝试这个。

 Select * from problem where RealID IN (?,?,?);

? =这里根据您的要求提供RealID  例如:

SELECT * FROM table WHERE RealID in (3);