Avatar billede beef12 Nybegynder
11. december 2003 - 08:36 Der er 8 kommentarer og
1 løsning

sql - eksisterer mere end 1 gang

Hej Eksperter,

Hvis jeg har en database med to rækker f.eks.

R      R1      R2
------------------
1        a    23
2        a    24
3        c    34
4        c    76
5        e    66

Hvordan skal jeg lave min SQL-sætning således at jeg får
alle R2 værdier der har mere end en tilknykket R1?
Avatar billede beef12 Nybegynder
11. december 2003 - 08:37 #1
jeg mener naturligvis: "en tabel med to rækker"
Avatar billede skwat Praktikant
11. december 2003 - 08:40 #2
select * from tabel where R2 in (select distinct R2 from tabel where count(R2) > 1) group by R2
Avatar billede beef12 Nybegynder
11. december 2003 - 08:43 #3
den har jeg osse prøvet, men jeg får at vide af Oracle DB'en at:

"gruppefunktion er ikke tilladt her" og den peger hver gang på "count"-funktionen...
Avatar billede venne Nybegynder
11. december 2003 - 09:01 #4
Det er fordi du ikke kan bruge * sammen med group by. Du kan kun selektere de kolonner som er nævnt i group by, samt aggregeringsdtryk (count, sum, max osv.)

Jeg er ikke helt klar over hvad du vil opnå, men prøv:

select R2 from tabel
group by R2
having count(*) > 1
Avatar billede beef12 Nybegynder
11. december 2003 - 09:14 #5
jeg vil gerne have dette output:

R1  R2
-------
a    23
a    24
c    34
c    76

Idet e optræder kun én gang, ryger den ud....
Avatar billede venne Nybegynder
11. december 2003 - 09:18 #6
Nå, men så prøv:

select * from tabel
where R1 in (
  select R1 from tabel
  group by R1
  having count(*) > 1
)
Avatar billede beef12 Nybegynder
11. december 2003 - 09:31 #7
ikke group ny R2?
Avatar billede venne Nybegynder
11. december 2003 - 09:39 #8
Ikke hvis du vil have det output du nævner. Har du prøvet om det virker?

Ved "group by R1" bliver alle rækker med samme værdi i R1 betragtet samlet. Det bliver til tre grupper med R1-værdierne a, c og e. Ved at sige "having count(*) > 1" vælges de grupper som har mere end én række "indeni", dvs a og c. Ud fra denne liste kan vi nu hente de fulde rækker i den ydre select ved at sige "where R1 in..."
Avatar billede beef12 Nybegynder
11. december 2003 - 09:40 #9
det virker, tak :o)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester