← Back to team overview

sslug-teknik team mailing list archive

Re: SQL - select intersect except

 

Kære Bjørn,

> Løsningen på problemet er:
> 
> select i from t where v=1
>   intersect
>     select i from t where v=2
>   except
>     select i from t where v not in (1, 2);
> 
> Dette finder den værdi "i" i tabellen "t" som har nøjagtig "v"=1 og "v"=2
> tilknyttet.
> 
> Er der nogen der kender en smartere måde at gøre ovenstående på?

Her er et par alternativer:

select t1.i 
  from t t1, t t2 
 where t1.v = '1' 
   and t2.v = '2' 
   and t1.i = t2.i
   and t1.i not in (select i from t where t.v not in (1,2));

eller 

select t1.i 
  from t t1, t t2 
 where t1.v = '1' 
   and t2.v = '2' 
   and t1.i = t2.i
   and t1.i not in (select i from t where t.v not in (t1.v,t2.v));

eller 

select t1.i 
  from t t1, t t2
 where t1.v = '1' 
   and t2.v = '2' 
   and t1.i = t2.i
   and 2 = (select count(*) from t where t.i = t1.i);

Fortsat god søndag.

-- Niels
-------------------------------------------------------
Niels Hallenberg                 Email: nh@xxxxxx
The IT University of Copenhagen  Tel.:  +45-38 16 88 24
Glentevej 67                     Fax:   +45-38 16 88 99
DK-2400 Copenhagen NV            WWW:   www.it.edu
-------------------------------------------------------


Follow ups