2012-08-08 3 views
1
distincts

je requête suivante:intersection oracle avec ou sans

select id from t1 
intersect 
select id from t2 
intersect 
select id from t3 

id pourrait être non unique dans certains tableaux, donc je dois utiliser distinctes.

En général ce qui est mieux:

select distinct id from (
select id from t1 
intersect 
select id from t2 
intersect 
select id from t3) 

ou

select distinct id from t1 
intersect 
select id from t2 -- here id is unique 
intersect 
select distinct id from t3 
+1

"better" - En quel sens? Performance? Il suffit de les exécuter tous les deux et de trouver ou d'utiliser un plan d'explication. – Ollie

+0

@Ollie, oui performance –

Répondre

4

Il n'y a pas besoin pour le DISTINCT. L'opérateur INTERSECT produit automatiquement un ensemble distinct de valeurs. Comme vous pouvez le voir dans cet exemple, x a deux lignes avec un ID de 1, y n'a qu'une seule rangée avec un ID de 1 et la INTERSECTION des deux produit une seule rangée

SQL> ed 
Wrote file afiedt.buf 

    1 with x as (select 1 id from dual union all select 1 from dual), 
    2  y as (select 1 id from dual) 
    3 select id 
    4 from x 
    5 intersect 
    6 select id 
    7* from y 
SQL>/

     ID 
---------- 
     1 

Même si vous prenez le INTERSECT de la table à deux lignes avec lui-même, vous obtenez toujours une seule ligne dans la sortie

SQL> ed 
Wrote file afiedt.buf 

    1 with x as (select 1 id from dual union all select 1 from dual) 
    2 select id 
    3 from x 
    4 intersect 
    5 select id 
    6* from x 
SQL>/

     ID 
---------- 
     1