Domanda

Sto eseguendo un processo SQL Netezza come parte di uno script di shell e in uno dei codici SQL, voglio che aumenti un errore o un'eccezione se il numero di righe da 2 tabelle diverse non corrisponde.

Codice 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 ;

Come posso confrontare i conteggi di 2 righe e sollevare un'eccezione/errore nel processo Netezza SQL, in modo che esca il processo, se i conteggi di 2 righe non sono uguali?

È stato utile?

Soluzione

Sono d'accordo che uno script è l'opzione migliore. Tuttavia potresti ancora effettuare l'assegno nel tuo SQL stesso usando un join incrociata

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'

Altri suggerimenti

Immagino che la soluzione migliore qui sia farlo nella sceneggiatura.
IE memorizzare il risultato del conteggio (*) nelle variabili, quindi confrontarle. NZSQL ha le opzioni della riga di comando per restituire solo i dati dei risultati di una singola query.

Se deve essere fatto in semplice SQL, un kludge orribile e orribile che funzionerà è usare Divide per zero. È brutto ma l'ho usato prima quando ho provato le cose. dalla parte superiore della mia testa:

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;

Ho già detto che è brutto?

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top