2015-03-13 1 views
-1

J'ai une requête SQL que j'ai mentionnée ci-dessous, mais j'ai utilisé UNION ALL qui prend plus de temps à s'exécuter. Mais je veux une approche différente pour obtenir les mêmes détails qui seront plus efficaces. Aidez-moi s'il vous plaît à ce sujet.Comment utiliser le concept UNION ALL de manière différente dans SQL

select creation_time, collected, errored 
from batch_summary 
where creation_time < (SYSDATE -1/24) and source_type in ('A','B','c') 
group by creation_time, source_type 

union all 

select creation_time, collected, errored 
from batch_summary 
where creation_time < (SYSDATE -1/24) and source_type in ('d') and batch_id like '%PGW%' 
group by creation_time, source_type 

union all 

select creation_time, collected, errored 
from batch_summary 
where creation_time < (SYSDATE -1/24) and source_type in ('E','F') 
group by creation_time, source_type 
+1

Ceci est un code SQL non valide, vous avez des colonnes dans la liste de sélection qui ne sont ni un argument d'une fonction d'agrégation ni répertoriées dans la clause GROUP BY. – jarlh

+0

En quoi consiste le groupe? Vous n'avez pas de valeurs agrégées. Votre requête n'a aucun sens. – Bohemian

+0

ce n'est pas la requête réelle .. la requête réelle est énorme .. mais il est d'avoir source_type dans certaines listes ... – user2642751

Répondre

0

Mettre les conditions dans un OR

select creation_time, collected, errored 
from batch_summary 
where 

(creation_time < (SYSDATE -1/24) and source_type in ('A','B','c')) 
OR 
(creation_time < (SYSDATE -1/24) and source_type in ('d') and batch_id like '%PGW%') 
OR 
(creation_time < (SYSDATE -1/24) and source_type in ('E','F')) 
group by creation_time, source_type 

Par ailleurs, UNION ALL est un le plus rapide façon d'obtenir des résultats dans un ensemble langage basé.