1

同じ構造のデータベースが2つあり、データベース間のレコードを比較したいと思います。2番目のデータベースのレコードは最初のデータベースからコピーされますが、コピープロセスが機能しない場合があり、1つのテーブルの最初のデータベースには、2番目のデータベースの同じテーブルよりも多くのレコードがあります。したがって、最初のデータベースのどのレコードが2番目のデータベースに存在しないかを知りたいのです。私はそのようなもので試しました:

<etl>
<connection id="db1" driver="auto"
    url="jdbc:mysql://localhost:3306/db" user="user"
    password="xxx"
    classpath="C:/mysql-connector-java-5.1.20.jar" />
<connection id="db2" driver="auto"
    url="jdbc:mysql://localhost:3307/db" user="user"
    password="xxx"
    classpath="C:/mysql-connector-java-5.1.20.jar" />
<connection id="text" driver="text" />
<query connection-id="db1">
    SELECT * FROM table;
    <query connection-id="db2">
        SELECT * FROM table WHERE id = '$id';
        <script connection-id="text">
            sometext, $rownum
        </script>
    </query>
</query>
</etl>

問題は、db2に対するクエリの結果が空の場合、スクリプトが実行されないことです。

この問題を解決する方法は?

よろしく、Jacek

4

2 に答える 2

1

countを使用して、実際のレコード数を確認できます。この場合、結果セットは常に1行を返します。例:

<query connection-id="db1">
    SELECT * FROM table;
    <query connection-id="db2">
        SELECT count(id) as CNT FROM table WHERE id = ?id;
        <!-- The script is executed ONLY IF number of results is zero -->
        <script connection-id="text" if="CNT==0">
            No matching record for id $id
        </script>
    </query>
</query>
于 2013-03-27T14:37:05.480 に答える
0

彼の問題はスクリプトが実行されなかったことであるため、おそらく彼はif条件を必要としません;)

于 2013-03-28T12:59:45.613 に答える