Frage

Ich führe einen Netezza -SQL -Prozess als Teil eines Shell -Skripts aus und in einem der SQL -Codes möchte ich, dass er einen Fehler oder eine Ausnahme ansteigt, wenn die Anzahl der Zeilen aus 2 verschiedenen Tabellen nicht übereinstimmt.

SQL -Code:

/*  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 ;

Wie vergleiche ich die 2 Zeilenzählungen und erhebe einen Ausnahme/einen Fehler im Netezza SQL -Prozess, damit er den Prozess verlässt, wenn die 2 Zeilenzahlen nicht gleich sind?

War es hilfreich?

Lösung

Ich bin damit einverstanden, dass ein Skript die beste Option ist. Sie können jedoch immer noch den Einchecken in Ihrem SQL selbst durchführen, indem Sie eine Kreuz -Join verwenden

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'

Andere Tipps

Ich vermute, die beste Lösung hier ist, es im Skript zu tun.
IE speichern das Ergebnis von Count (*) in Variablen und vergleichen Sie sie. NZSQL verfügt über Befehlszeilenoptionen, um nur die Ergebnisdaten einer einzelnen Abfrage zurückzugeben.

Wenn es in einfachem SQL geschehen muss, ist ein schrecklicher, schrecklicher Kludge, der funktioniert, um Divide-by-Null zu verwenden. Es ist hässlich, aber ich habe es schon einmal beim Testen verwendet. Ab meinem Kopf:

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;

Habe ich erwähnt, dass dies hässlich ist?

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top