2017-03-20 22 views
1

私のMySQLには、列の点で全く同じ2つのテーブルがあります。私はID、名前、パス、日付と呼ぶことができます。ここでは、テーブル1とテーブル2の違い、テーブル2とテーブル1の違いを調べるために、これらの2つのテーブルを比較したいと思います。私は単にJavaプログラムで印刷したいと思っています。ただ単にSystem.out.print違いは完璧です。2つのテーブルを比較して差分を出力する

私は両方のテーブルの名前列のエントリの違いをチェックしたいだけです。どのような助けにも感謝しています!これは、IDに2つのテーブルを結合し、あなたの名前が異なっている行が表示されます

+0

table1には存在するがtable2には存在しない名前のリストを参照したいだけですか? – reaanb

+0

正確に、可能であれば、Javaで結果を照会して印刷する方法は可能です。私は既にJavaプログラムにMySQLの接続を持っていますので、私が知りたいのは、どのようにしてクエリを設定するのかです。 –

答えて

2

ですが、ありません表2で比類のない名前を取得するには、そのクエリに

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

スワップTABLE1と表2:表2におけるtは、次のことを試してください。

0

:私はあなたが2つのデータベースをdiffをし、(テスト用DBとのprodデシベル)のように、それらの間の違いを見ることができることを確実に知る

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

Answer by reaanbは正しいので、受け入れてください。

実際のSQLコードを示すJava JDBCコードの例です。私はMySQLを使っていません(質問のように)。代わりに、この例ではH2 Database Engineを使用して、一時的なメモリ内データベースを作成します。

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 (); 
} 

実行時。

Dump table t1_ 
id: 1 | name: Jesse 
id: 2 | name: Wendy 
id: 3 | name: Lisa 
id: 4 | name: Susan 
id: 5 | name: Jimmy 
id: 6 | name: Wine 

Dump table t2_ 
id: 1 | name: Jesse 
id: 2 | name: Wendy 
id: 3 | name: Lisa 
id: 4 | name: Susan 
id: 5 | name: Jimmy 
id: 6 | name: Beer 

Show names that exist in t1_ but not in t2_. 
id: 6 | name: Wine 

Show names that exist in t2_ but not in t1_. 
id: 6 | name: Beer 
関連する問題