Pergunta

Estou executando um processo netezza sql como parte de um script de shell e em um dos códigos sql, quero que ele gere um ERRO ou exceção se o número de linhas de 2 tabelas diferentes não corresponder.

Código 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 ;

Como posso comparar as contagens de 2 linhas e gerar uma exceção/ERRO no processo netezza SQL, para que ele saia do processo, se as contagens de 2 linhas não forem iguais?

Foi útil?

Solução

Concordo que um script é a melhor opção. No entanto, você ainda pode fazer o cheque em seu próprio SQL usando uma junção cruzada

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'

Outras dicas

Acho que a melhor solução aqui é fazer isso no script.
ou seja, armazene o resultado de count(*) em variáveis ​​e compare-os.nzsql possui opções de linha de comando para retornar apenas os dados do resultado de uma única consulta.

Se isso deve ser feito em SQL simples, um truque horrível que funcionará é usar divisão por zero.É feio, mas já usei antes para testar coisas.Em cima da minha cabeça:

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;

Eu mencionei que isso é feio?

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top