2017-02-06 20 views
0

私は少し問題があります。私はそうのような名前、IDと異なる形状を持つテーブルがある:SQL:同じIDを持つ複数の行を選択

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

私はIDのリストに基づいて、すべてのハンプシャーの行を選択する必要があります。あなたが見ることができるように、私のテーブルはハンプシャーのために異なる幾何学を持っています。 私はそれらのリストから取得する1つのIDと比較するだけで、何とかそれらのすべてを必要とします。

私はJavaからIDのリストを取得します。それはこれまでに1つのID(3)を持つ単なるリストです。これを行う

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

それだけに関係なく、私に1行を返していない私は、リストにハンプシャーのIDで送信する場合(3)。私はこのような何かを試した:

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

しかし、構文が間違っていると私は私の目標を達成するために何をすべきか分からない。

+2

':listOfIds'は有効なJDBCプレースホルダではありません。あなたのJavaコードを表示してください。 –

答えて

2

あなたは、たとえば、次の構文

SELECT * FROM table WHERE RealID in (listofids) 

を試すことができます。

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

ます。また、このTRができます:あなたはいくつかのことを安全かつ清潔にしたい場合は

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

ありがとう、これが助けになりました。私は今すべてのハンプシャーを持っていて、私が彼らと一緒に欲しいことをすることができます。ありがとうございました。 –

+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(?, ?, ?, ?, ?) 

これは安全な方法です。

0

これを試すことができますか?

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

? =ここにRealIDを入力してください。 例:

関連する問題