質問

シェルスクリプトの一部としてNetezza SQLプロセスを実行しており、SQLコードの1つで、2つの異なるテーブルからの行数が一致しない場合は、エラーまたは例外を上げたいと思います。

SQLコード:

/*  The following 2 tables should return the same number of rows to make sure the process is correct */

select              count(*) 
from                (
                select distinct col1, col2,col3 
                from table_a
                where  week > 0 and rec >= 1
                ) as x ;


select              count(*) 
from                (
                select distinct col1, col2, col3
                from table_b
                ) as y ;

2行カウントを比較し、Netezza SQLプロセスの例外/エラーを上げて、2行のカウントが等しくない場合にプロセスを終了するにはどうすればよいですか?

役に立ちましたか?

解決

スクリプトが最良の選択肢であることに同意します。ただし、クロス結合を使用して、SQL自体をチェックインすることもできます

Select a.*
from Next_Step_table a cross join
(select case when y.y_cnt is null then 'No Match' else 'Match' end as match
from (select count(*) as x_cnt
from  ( select distinct col1, col2,col3 
        from table_a
        where  week > 0 and rec >= 1
       )) x left outer join
(select count(*) as y_cnt
from  (select distinct col1, col2, col3
       from table_b
       )) y  on x.x_cnt=y.y_cnt) match_tbl
where match_tbl.match='Match'

他のヒント

ここで最良の解決策は、スクリプトでそれを行うことだと思います。
IEカウント(*)の結果を変数に保存し、それらを比較します。 NZSQLには、単一のクエリの結果データのみを返すコマンドラインオプションがあります。

プレーンSQLで行う必要がある場合、機能する恐ろしく、恐ろしいクラッジは、ゼロごとに使用することです。醜いですが、テストするときに以前に使用しました。私の頭の上から:

with 
subq_x as select count(*) c1 .... ,
subq_y as select count(*) c2 ...
select (case when (subq_x.c1 != subq_y.c1) then 1/0 else 1 end) counts_match;

これは醜いと言いましたか?

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top