2016-10-21 13 views
0

比較する2つのテーブルがあります。SQLのSelectステートメントの動的フィールド

TAB1 
KEY F1 F2 F3 F4 
1A 70 61 58 91 
1B 61 97 73 53 
1C 96 16 32 92 

表2は、表1のサブセットであり、異なるソースからロードされる:

表1は、すべてのフィールドが含まれているチェックテーブルです。 理想的には、両方のテーブルの対応するデータは一致する必要がありますが、実際には違いがあります。たとえば、以下の例では、キー1Cの列F3の値が異なります。それ以外は同じです。私が必要

TAB2 
KEY F1 F3 
1A 70 58 
1C 96 10 

エンド出力は比較にある

KEY F1_CHK F1 F1_DELTA F3_CHK F3 F3_DELTA 
1A 70  70 0   58 58 0 
1C 96  96 0   32 10 22 

私は今

select TAB1.F1, TAB2.F1 , (TAB1.F1-TAB2.F1) , TAB1.F3, TAB2.F3 , (TAB1.F3-TAB2.F3) 
FROM TAB1 INNER JOIN 
    TAB2 
    ON KEY = KEY 

のように、問題は、私は、動的であることをこのソリューションを必要とすることであるで探していますので、選択。あるべき 私は

ステップ1(TAB2)私は上記の太字で示され、選択中のフィールドのリストがサブセットテーブルのフィールドに基づいてしなければならない意味することはTAB1 ステップ2のフィールドのリストを取得しなければなりませんTAB1とTAB2からこれらのフィールドを選択した場合(対応するフィールド名は常に同じになります)、その差を計算します。 したがって、基本的に期待されるselectステートメントは次のようになります。 TAB1のフィールドのリストについてはTAB1 INNER FROM TAB2フィールドリストに基づいてフィールドの動的リストを選択するKEY ON TAB2のJOIN = KEY

、私はメタデータテーブルに移動し、それを取得することができます。.. ステップ2混乱させる私.. 任意の助けが素晴らしいだろう..

ありがとう!

答えて

1

SQL言語では、参照する列とテーブルが準備時に設定されている必要があります。その周りに方法はありません。

文字列にSQLクエリを作成するコードを記述し、そのクエリを実行する必要があります。ここで

は、私はそれを行うだろう方法は次のとおりです。

  1. は、そのテーブルのフィールドのリストを取得するにはSHOW COLUMNS FROM TAB2のようなSQLクエリを実行します。

  2. コード内でクエリの列の選択リストになる配列を開始します。

  3. SHOW COLUMNS結果の各フィールドに対して、選択リスト配列に要素を追加します。

  4. クエリの選択リストとして配列を使用して新しいSQLクエリを作成します。ここで

は私が何を意味するかのような何かをするいくつかの簡単な(未テスト)Pythonのコードです:

db = MySQLdb.connect(...) 

cur = db.cursor(MySQLdb.cursors.DictCursor) 
cur.execute("""SHOW COLUMNS FROM TAB2""") 
select_list = [] 
for col in cur.fetchall(): 
    select_list.append('TAB1.{field}'.format(field=col['Field'])) 
    select_list.append('TAB2.{field}'.format(field=col['Field'])) 
    select_list.append('TAB1.{field}-TAB2.{field}'.format(field=col['Field'])) 

sql = """ 
    SELECT {select_list} 
    FROM TAB1 INNER JOIN TAB2 ON KEY = KEY 
    """.format(select_list=','.join(select_list)) 

cur.execute(sql) 
... read results ... 

私はHANA用のコードを書くことについて何も知らないが、原理は同じです。 SQLクエリを構築して実行するコードを記述する必要があります。

関連する問題