0

我有一个数据库,其中不止一行具有相同的值。例如,

列 1 列 2

A       X
A       Y
A       Z

结果集将第 2 列的所有值作为单个字符串获取。如何从数据库(或结果集中)获取每个唯一值?

(我用java)

提前致谢。

4

2 回答 2

0

看一下

SELECT columna ,
(SELECT  GROUP_CONCAT(DISTINCT columnb SEPARATOR ' ') FROM test 
WHERE columna=t.`columna` ) as columnb_string    
FROM `test` t GROUP BY columna

这是小提琴示例

于 2013-07-01T19:51:49.133 回答
-2

您用于将所有第二列作为字符串获取的查询/代码是什么?在数据库系统本身中测试您的查询总是一个好主意,或者您可以使用SQLFiddle来确保您从查询中获得预期的结果

从文档:

ResultSet 对象维护一个指向其当前数据行的游标。最初,光标位于第一行之前。next 方法将光标移动到下一行,并且因为它在 ResultSet 对象中没有更多行时返回 false,所以可以在 while 循环中使用它来遍历结果集。

阅读ResultSet 的 Java Doc的其余部分

从数据库中获取值的典型方法是

//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    

PreparedStatement连接文档

于 2013-07-01T19:46:58.527 回答