2017-09-22 21 views
0

データベースにいくつかのテーブルがあります。彼らはいくつかの特定のパターンを持っています。私はこれらのテーブルにデータが含まかどうか、彼らがしなければ、私は各テーブルにいくつかのメソッドを呼び出す必要があればチェックしたいデータベースから複数のテーブルからデータを取得する

table 1:employee 
table 2:employee_X 
table 3:employee_Y 

:たとえば、私はテーブルの従業員、のように同じパターンで、その後いくつかの他のテーブルを持って考えます。私は取得するために次のコードを使用しています。

DatabaseMetaData meta = con.getMetaData(); 
ResultSet res = meta.getTables(null, null, "My_Table_Name", new String[] {"TABLE"}); 
while (res.next()) { 

    if(rs.getStrin(3).equals(employee)){ 
     //my code to write data of this table to a file 
    } 

    if(rs.getString(3).equals(employee_X)){ 
     //my code to write data to the same file 

    } 

    if(rs.getString(3).equals(employee_Y)){ 
     //code to write data to the same file from this table 
    } 
} 

コードは問題なく動作しますが、3つのチェックを使用する代わりに、これらのすべてのテーブルからデータを一度に取得する方法はありますか。これらのテーブルのいずれかにデータが含まれている場合は、ファイルに書きたいと思います。どのように私は少ないコード行で効率的にこの操作を実行できますか?

誰もがこれらのテーブルのそれぞれに1つのステートメントでデータが入っているかどうかを確認する方法を提案でき、コードを呼び出してデータをファイルに書き出すことができます。

答えて

1

複雑なクエリでUNION文を使用できます。 、例を確認してください:

SELECT id, name FROM employee WHERE id = ? 
    UNION 
SELECT id, name FROM employee_x WHERE id = ? 
    UNION 
... 

また、あなたはUNIONの代わりにUNION ALLステートメントを使用することができます。主な違いは、UNIONは重複なしで一意の結果セットを返します。UNION ALLは複製を許可します。 unionの詳細については、このリンクhttps://www.w3schools.com/sql/sql_union.aspをご確認ください。

Set<String> requiredTables = new HashSet<>(); 
// fill set with required tables for result query 
requiredTables.add("employee"); 
ResultSet res = meta.getTables(null, null, "My_Table_Name", 
new String[] {"TABLE"}); 

List<String> existentTables = new LinkedList<>(); 
while(res.next()) { 
    if (requiredTables.contains(res.getString(3)) { 
     existentTables.add(res.getString(3)); 
    } 
} 

String query = existentTables.stream().map(table -> String.format("SELECT * FROM %s", table)).collect(Collectors.joinning(" UNION ")); 
+0

のNOP最初、私はそれがdatabseは、特定のテーブルが含まれているかどう私のコードを検索する必要がありたいと含まれている場合は、それからのデータをretireve:カスタムフィルタテーブルを持つUNIONクエリを作成する必要がある場合は

、例をご確認ください。 。なぜこの文を何度も使用しなければならないのですか? – user8646082

+0

この場合、dbから利用可能なテーブルを取得し、必要なフィルタを作成し、答えで定義されているunionを持つ単一のクエリを作成できます。 – eg04lt3r

+0

thatsどのように特定のパターンのテーブルを一度にフィルタリングするかを質問しています – user8646082

関連する問題