我有两张桌子。这些表具有相同的模式,包括userid,username。我想检查username
和table1
中是否有共同的table2
。
rs1 = statement.executeQuery("select username from table1")
rs2 = statement.executeQuery("select username from table2")
我的逻辑是:
while(rs1.next())
rs1
的值与rs2
的每个值进行比较。If
匹配找到打印值else
中的一个打印两个值。有没有办法在java中实现这一点...请任何人帮助我...谢谢......
答案 0 :(得分:4)
我会使用一个SQL语句:
select table1.username from table1, table2 where table1.username = table2.username
这将只返回两个表中出现的用户名,因此不需要进行后处理。
此构造称为inner join。如果您还想识别table1
和/或table2
所独有的用户名,则可以使用outer join。
答案 1 :(得分: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
}
答案 2 :(得分: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;
}
答案 3 :(得分: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();
}
答案 4 :(得分:0)
一种方法可能是: -
String query = "(" + query1 +") intersect ("+ query2 + ")";
交叉操作中的位置无论如何都会为您提供公共列。
P.S。 : - 我知道这个问题很老,但它可能对某人有所帮助。
答案 5 :(得分:-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();
}