6

我有两张桌子。并且这些表具有相同的架构,由用户 ID、用户名组成。我想检查和中是否有任何共同点usernametable1table2

 rs1 = statement.executeQuery("select username from table1")
 rs2 = statement.executeQuery("select username from table2")

我的逻辑是:

  • while(rs1.next())
  • 将 的值rs1与 的每个值进行比较rs2
  • If找到匹配的打印值之一else打印两个值。

有没有办法在java中实现这一点......请任何人帮助我......谢谢......

4

6 回答 6

4

我会使用一条 SQL 语句:

select table1.username from table1, table2 where table1.username = table2.username

这只会返回出现在两个表中的用户名,因此不需要后处理。

这种构造称为内连接。如果您还想识别table1和/或唯一的用户名table2,您可以使用外连接

于 2013-03-03T09:05:13.827 回答
0

伪代码:

if ( A.type = B.type )
{
    PRINT same type

    if ( A.format = B.format )
    {
        PRINT same format

        if ( A.value = B.value )
        {
            PRINT same value
        }
        else
        {
            PRINT different value
        }
    }
    else
    {
        PRINT different format
    }
}
else
{
    PRINT different type
}
于 2013-03-03T09:37:43.950 回答
0

您可以通过 SQL 语句 IN 和 NOT IN 来解决它,或者您可以尝试这样的事情:

public boolean compareResultSets(ResultSet resultSet1, ResultSet resultSet2) throws SQLException{
        while (resultSet1.next()) {
            resultSet2.next();
            ResultSetMetaData resultSetMetaData = resultSet1.getMetaData();
            int count = resultSetMetaData.getColumnCount();
            for (int i = 1; i <= count; i++) {
                if (!resultSet1.getObject(i).equals(resultSet2.getObject(i))) {
                    return false;
                }
            }
        }
        return true;
    }
于 2013-03-03T09:46:00.813 回答
0

我举一个例子来解决这个问题:

rs1 = statement.executeQuery("select username from table1")
rs2 = statement.executeQuery("select username from table2")

while(rs1.next()) {
// Compare till rs1 reachs its last record.
  while(rs2.next()) {
     if() {
       // Do your code here...
     }
  }

// this will move resultSet cursor to the first position.
rs2.first();
}
于 2013-04-23T06:21:05.467 回答
0

一种方法可能是:-

String query = "(" + query1 +") intersect ("+ query2 + ")";

无论如何,相交操作中的位置将为您提供公共列。

PS :- 我知道这个问题很老,但它可能对某人有所帮助。

于 2018-05-04T05:21:11.657 回答
-1

这个答案已经由 Akash5288 给出并由 Pavel Smirnov 编辑。这对我来说就像魔术一样有效。我无法对原始答案进行点赞或评论,这就是我重新发布它的原因。非常感谢。我这边只有一个编辑:rs2.beforeFirst(); 会比rs2.first() 更好地工作;.

我举一个例子来解决这个问题:

rs1 = statement.executeQuery("select username from table1")
rs2 = statement.executeQuery("select username from table2")

while(rs1.next()) {
// Compare till rs1 reachs its last record.
  while(rs2.next()) {
     if() {
       // Do your code here...
     }
  }

// this will move resultSet cursor to the first position.
rs2.first();
}
于 2020-10-02T13:57:26.973 回答