我有一个数据库,其中不止一行具有相同的值。例如,
列 1 列 2
A X A Y A Z
结果集将第 2 列的所有值作为单个字符串获取。如何从数据库(或结果集中)获取每个唯一值?
(我用java)
提前致谢。
看一下
SELECT columna ,
(SELECT GROUP_CONCAT(DISTINCT columnb SEPARATOR ' ') FROM test
WHERE columna=t.`columna` ) as columnb_string
FROM `test` t GROUP BY columna
这是小提琴示例
您用于将所有第二列作为字符串获取的查询/代码是什么?在数据库系统本身中测试您的查询总是一个好主意,或者您可以使用SQLFiddle来确保您从查询中获得预期的结果
从文档:
ResultSet 对象维护一个指向其当前数据行的游标。最初,光标位于第一行之前。next 方法将光标移动到下一行,并且因为它在 ResultSet 对象中没有更多行时返回 false,所以可以在 while 循环中使用它来遍历结果集。
从数据库中获取值的典型方法是
//Construct a statement
String yourStatement = "Select COLUMN_B from aTable WHERE COLUMN_A LIKE 'A'" // EDITED
PreparedStatement aPrepStatement = null;
ResultSet rs = null;
List<String> aList = new ArrayList<String>(); // ADDED
try
{
aPrepStatement = yourConnection.prepareStatement(yourStatement)
rs = aPrepStatement.executeQuery();
while(rs.next())
{
// You are now in the first row of data depending on your query
// String column1 = rs.getString(1); // 'A' In the table you descrbed above (for first iteration
String column2 = rs.getString(1); // 'X' In the table you descrbed above
// Now do what you need to with the data
aList.add(column2) // EDITED
}
}
catch (Exception ex) {
// deal with any exceptions that arise
ex.printStackTrace();
}
finally
{
//Close your Resultset and prepared statement (this will possibly need a try catch block also
if(rs != null)
rs.close();
if(aPrepStatement != null)
aPrepStatement.close();
}
// ADDED BELOW
for(String s: aList)
System.out.println(s) // should give output
// X
// Y
// Z