Pregunta

Estoy ejecutando un proceso de Netezza SQL como parte de un script de shell y en uno de los códigos SQL, quiero que plantee un error o excepción si el número de filas de 2 tablas diferentes no coincide.

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 ;

¿Cómo comparo los recuentos de 2 filas y plantean una excepción/error en el proceso Netezza SQL, para que salga del proceso, si los recuentos de 2 filas no son iguales?

¿Fue útil?

Solución

Estoy de acuerdo en que un script es la mejor opción. Sin embargo, aún podría hacer el cheque en su SQL utilizando una unión 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'

Otros consejos

Supongo que la mejor solución aquí es hacerlo en el guión.
es decir, almacene el resultado del recuento (*) en variables, luego compárelos. NZSQL tiene opciones de línea de comandos para devolver solo los datos de resultados de una sola consulta.

Si se debe hacer en SQL simple, un kludge horriblemente y horrible que funcionará es usar divide por cero. Es feo, pero lo he usado antes al probar cosas. la parte superior de mi cabeza:

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;

¿Mencioné que esto es feo?

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top