Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 将两个表相互比较并打印出差异_Java_Mysql_Sql_Database_Diff - Fatal编程技术网

Java 将两个表相互比较并打印出差异

Java 将两个表相互比较并打印出差异,java,mysql,sql,database,diff,Java,Mysql,Sql,Database,Diff,我的MySQL中有两个列完全相同的表,我们可以称它们为id、name、path、date。现在我想对这两个表进行比较,以了解表1和表2的区别,以及表2和表1的区别。我只想在我的Java程序中打印它,现在一个简单的System.out.print的差异将是完美的 我只想检查两个表中name列中条目的差异。非常感谢您的帮助 这将连接id上的两个表,并显示名称不同的行: select a.name, b.name from table1 a join table2 b on a.id = b.id

我的MySQL中有两个列完全相同的表,我们可以称它们为id、name、path、date。现在我想对这两个表进行比较,以了解表1和表2的区别,以及表2和表1的区别。我只想在我的Java程序中打印它,现在一个简单的System.out.print的差异将是完美的


我只想检查两个表中name列中条目的差异。非常感谢您的帮助

这将连接id上的两个表,并显示名称不同的行:

select a.name, b.name 
from table1 a 
join table2 b on a.id = b.id
where a.name <> b.name

这将连接id上的两个表,并向您显示名称不同的行:

select a.name, b.name 
from table1 a 
join table2 b on a.id = b.id
where a.name <> b.name

我确信您可以区分两个数据库,并看到它们之间的差异,比如testdb和proddb

这是文件


我确信您可以区分两个数据库,并看到它们之间的差异,比如testdb和proddb

这是文件


如果您只想查看表1中存在但不在表2中的名称列表,请尝试以下操作:

SELECT a.name
FROM table1 a
LEFT JOIN table2 b ON a.name = b.name
WHERE table2.name IS NULL

在该查询中交换table1和table2,以获取table2中不匹配的名称。

如果您只想查看table1中存在但不在table2中的名称列表,请尝试以下操作:

SELECT a.name
FROM table1 a
LEFT JOIN table2 b ON a.name = b.name
WHERE table2.name IS NULL
交换该查询中的表1和表2,以获得表2中不匹配的名称。

正确,应接受

下面是Java JDBC代码示例,显示了他的SQL代码的实际操作。我没有像问题中那样使用MySQL。相反,本例使用,创建一个临时内存中数据库

try {
    Class.forName ( "org.h2.Driver" );
} catch ( final ClassNotFoundException e ) {
    e.printStackTrace ( );
}
try ( Connection conn = DriverManager.getConnection ( "jdbc:h2:mem:trash_me_db" ) ;
      Statement stmt = conn.createStatement ( ) ) {
    String sql = null;

    // Table 1
    sql = "CREATE TABLE t1_ (\n" +
            "  id_ INT IDENTITY ,\n" +
            "  name_ VARCHAR \n" +
            ");";
    stmt.executeUpdate ( sql );
    stmt.execute ( "INSERT INTO t1_ ( name_ ) VALUES ('Jesse');" );
    stmt.execute ( "INSERT INTO t1_ ( name_ ) VALUES ('Wendy');" );
    stmt.execute ( "INSERT INTO t1_ ( name_ ) VALUES ('Lisa');" );
    stmt.execute ( "INSERT INTO t1_ ( name_ ) VALUES ('Susan');" );
    stmt.execute ( "INSERT INTO t1_ ( name_ ) VALUES ('Jimmy');" );
    stmt.execute ( "INSERT INTO t1_ ( name_ ) VALUES ('Wine');" );

    // Dump
    System.out.println ( "\nDump table t1_" );
    try ( ResultSet rs = stmt.executeQuery ( "SELECT * FROM t1_ ;" ) ) {
        while ( rs.next ( ) ) {
            final int id = rs.getInt ( "id_" );    //Retrieve by column name
            final String name = rs.getString ( "name_" );
            System.out.println ( "id: " + id + " | name: " + name );
        }
    }

    // Table 2
    sql = "CREATE TABLE t2_ (\n" +
            "  id_ INT IDENTITY ,\n" +
            "  name_ VARCHAR \n" +
            ");";
    stmt.executeUpdate ( sql );
    stmt.execute ( "INSERT INTO t2_ ( name_ ) VALUES ('Jesse');" );
    stmt.execute ( "INSERT INTO t2_ ( name_ ) VALUES ('Wendy');" );
    stmt.execute ( "INSERT INTO t2_ ( name_ ) VALUES ('Lisa');" );
    stmt.execute ( "INSERT INTO t2_ ( name_ ) VALUES ('Susan');" );
    stmt.execute ( "INSERT INTO t2_ ( name_ ) VALUES ('Jimmy');" );
    stmt.execute ( "INSERT INTO t2_ ( name_ ) VALUES ('Beer');" );

    // Dump
    System.out.println ( "\nDump table t2_" );
    try ( ResultSet rs = stmt.executeQuery ( "SELECT * FROM t2_ ;" ) ) {
        while ( rs.next ( ) ) {
            final int id = rs.getInt ( "id_" );    //Retrieve by column name
            final String name = rs.getString ( "name_" );
            System.out.println ( "id: " + id + " | name: " + name );
        }
    }

    // Difference, left.
    System.out.println ( "\nShow names that exist in t1_ but not in t2_." );
    sql = "SELECT *\n" +
            "FROM t1_ \n" +
            "LEFT JOIN t2_ ON t1_.name_ = t2_.name_\n" +
            "WHERE t2_.name_ IS NULL";
    try ( ResultSet rs = stmt.executeQuery ( sql ) ) {
        while ( rs.next ( ) ) {
            final int id = rs.getInt ( "id_" );    //Retrieve by column name
            final String name = rs.getString ( "name_" );
            System.out.println ( "id: " + id + " | name: " + name );
        }
    }

    // Difference, right.
    System.out.println ( "\nShow names that exist in t2_ but not in t1_." );
    sql = "SELECT *\n" +
            "FROM t2_ \n" +
            "LEFT JOIN t1_ ON t2_.name_ = t1_.name_\n" +
            "WHERE t1_.name_ IS NULL";
    try ( ResultSet rs = stmt.executeQuery ( sql ) ) {
        while ( rs.next ( ) ) {
            final int id = rs.getInt ( "id_" );    //Retrieve by column name
            final String name = rs.getString ( "name_" );
            System.out.println ( "id: " + id + " | name: " + name );
        }
    }


} catch ( final SQLException e ) {
    e.printStackTrace ( );
}
跑步的时候

转储表t1_ id:1 |姓名:杰西 id:2 |姓名:Wendy id:3 |姓名:丽莎 id:4 |姓名:苏珊 id:5 |姓名:吉米 id:6 |名称:葡萄酒 转储表t2_ id:1 |姓名:杰西 id:2 |姓名:Wendy id:3 |姓名:丽莎 id:4 |姓名:苏珊 id:5 |姓名:吉米 id:6 |姓名:啤酒 显示存在于t1_u1;但不存在于t2_1;中的名称。 id:6 |名称:葡萄酒 显示存在于t2_u2;中但不存在于t1_2;中的名称。 id:6 |姓名:啤酒 这是正确的,应该被接受

下面是Java JDBC代码示例,显示了他的SQL代码的实际操作。我没有像问题中那样使用MySQL。相反,本例使用,创建一个临时内存中数据库

try {
    Class.forName ( "org.h2.Driver" );
} catch ( final ClassNotFoundException e ) {
    e.printStackTrace ( );
}
try ( Connection conn = DriverManager.getConnection ( "jdbc:h2:mem:trash_me_db" ) ;
      Statement stmt = conn.createStatement ( ) ) {
    String sql = null;

    // Table 1
    sql = "CREATE TABLE t1_ (\n" +
            "  id_ INT IDENTITY ,\n" +
            "  name_ VARCHAR \n" +
            ");";
    stmt.executeUpdate ( sql );
    stmt.execute ( "INSERT INTO t1_ ( name_ ) VALUES ('Jesse');" );
    stmt.execute ( "INSERT INTO t1_ ( name_ ) VALUES ('Wendy');" );
    stmt.execute ( "INSERT INTO t1_ ( name_ ) VALUES ('Lisa');" );
    stmt.execute ( "INSERT INTO t1_ ( name_ ) VALUES ('Susan');" );
    stmt.execute ( "INSERT INTO t1_ ( name_ ) VALUES ('Jimmy');" );
    stmt.execute ( "INSERT INTO t1_ ( name_ ) VALUES ('Wine');" );

    // Dump
    System.out.println ( "\nDump table t1_" );
    try ( ResultSet rs = stmt.executeQuery ( "SELECT * FROM t1_ ;" ) ) {
        while ( rs.next ( ) ) {
            final int id = rs.getInt ( "id_" );    //Retrieve by column name
            final String name = rs.getString ( "name_" );
            System.out.println ( "id: " + id + " | name: " + name );
        }
    }

    // Table 2
    sql = "CREATE TABLE t2_ (\n" +
            "  id_ INT IDENTITY ,\n" +
            "  name_ VARCHAR \n" +
            ");";
    stmt.executeUpdate ( sql );
    stmt.execute ( "INSERT INTO t2_ ( name_ ) VALUES ('Jesse');" );
    stmt.execute ( "INSERT INTO t2_ ( name_ ) VALUES ('Wendy');" );
    stmt.execute ( "INSERT INTO t2_ ( name_ ) VALUES ('Lisa');" );
    stmt.execute ( "INSERT INTO t2_ ( name_ ) VALUES ('Susan');" );
    stmt.execute ( "INSERT INTO t2_ ( name_ ) VALUES ('Jimmy');" );
    stmt.execute ( "INSERT INTO t2_ ( name_ ) VALUES ('Beer');" );

    // Dump
    System.out.println ( "\nDump table t2_" );
    try ( ResultSet rs = stmt.executeQuery ( "SELECT * FROM t2_ ;" ) ) {
        while ( rs.next ( ) ) {
            final int id = rs.getInt ( "id_" );    //Retrieve by column name
            final String name = rs.getString ( "name_" );
            System.out.println ( "id: " + id + " | name: " + name );
        }
    }

    // Difference, left.
    System.out.println ( "\nShow names that exist in t1_ but not in t2_." );
    sql = "SELECT *\n" +
            "FROM t1_ \n" +
            "LEFT JOIN t2_ ON t1_.name_ = t2_.name_\n" +
            "WHERE t2_.name_ IS NULL";
    try ( ResultSet rs = stmt.executeQuery ( sql ) ) {
        while ( rs.next ( ) ) {
            final int id = rs.getInt ( "id_" );    //Retrieve by column name
            final String name = rs.getString ( "name_" );
            System.out.println ( "id: " + id + " | name: " + name );
        }
    }

    // Difference, right.
    System.out.println ( "\nShow names that exist in t2_ but not in t1_." );
    sql = "SELECT *\n" +
            "FROM t2_ \n" +
            "LEFT JOIN t1_ ON t2_.name_ = t1_.name_\n" +
            "WHERE t1_.name_ IS NULL";
    try ( ResultSet rs = stmt.executeQuery ( sql ) ) {
        while ( rs.next ( ) ) {
            final int id = rs.getInt ( "id_" );    //Retrieve by column name
            final String name = rs.getString ( "name_" );
            System.out.println ( "id: " + id + " | name: " + name );
        }
    }


} catch ( final SQLException e ) {
    e.printStackTrace ( );
}
跑步的时候

转储表t1_ id:1 |姓名:杰西 id:2 |姓名:Wendy id:3 |姓名:丽莎 id:4 |姓名:苏珊 id:5 |姓名:吉米 id:6 |名称:葡萄酒 转储表t2_ id:1 |姓名:杰西 id:2 |姓名:Wendy id:3 |姓名:丽莎 id:4 |姓名:苏珊 id:5 |姓名:吉米 id:6 |姓名:啤酒 显示存在于t1_u1;但不存在于t2_1;中的名称。 id:6 |名称:葡萄酒 显示存在于t2_u2;中但不存在于t1_2;中的名称。 id:6 |姓名:啤酒
您是否只想查看表1中存在但表2中不存在的名称列表,反之亦然?确切地说,如果可能,我如何用Java查询和打印结果。我的Java程序中已经有一个工作的MySQL连接,所以我只想知道如何设置查询。您是否只想看到表1中存在但表2中不存在的名称列表,反之亦然?完全正确,如果可能,我如何用Java查询和打印结果。我的Java程序中已经有一个可以工作的MySQL连接,所以我只想知道如何设置查询。