Avatar billede jespere Nybegynder
15. april 2004 - 11:23 Der er 5 kommentarer og
1 løsning

Uforklarligt problem med subquery

Hej

Jeg har følgende query som ikke virker helt efter min hensigt.

select id from ressource
where id not in(select ressourceid from omraaderessource where omraadeid = 9)

Den skulle gerne returnere de poster (ID) fra ressource som IKKE ligger i omraaderessource
Det gør den næsten også. Der mangler bare 28 poster.

"select id from ressource"
giver 289 poster

"select ressourceid from omraaderessource where omraadeid = 9"
giver 49 poster

Og hvis jeg laver den en smule om så den henter de poster der ER i omraaderessource:

select id from ressource
where id in(select ressourceid from omraaderessource where omraadeid = 9)

giver det også 49 poster.

Forskellen er altså 240 poster, som jeg mener at queryen skulle returnere.
Men det gør den bare ikke. Den returnerer kun 212 poster.

Er der nogen som har et godt bud ?

/JEsper
Avatar billede trer Nybegynder
15. april 2004 - 11:37 #1
Du får kun 49 id'er ud i din subselect - så med mindre der er dubletter i id kolonnen i resource-tabellen, så vil den også kun kunne returnere 49 rækker.

Du har jo netop begrænset udtrækket ved at sige at du kun er interesseret i de 49 id'er subselecten returnerer
Avatar billede jespere Nybegynder
15. april 2004 - 11:43 #2
Ja, jeg får kun 49 i min subselect og det er fint nok.
Men den overordnede query skulle gerne returnere de resterende 240 poster fra ressource som ikke er blandt de 49.
Og det er det som den ikke gør.
Avatar billede trer Nybegynder
15. april 2004 - 11:50 #3
Hvor mange distincte poster har du i ressource tabellen?

select distinct id from ressource
Avatar billede trer Nybegynder
15. april 2004 - 11:53 #4
Og hvor mange distincte har du i områderessource med områdeid 9 ?
Avatar billede jespere Nybegynder
15. april 2004 - 12:01 #5
select distinct id from ressource -> 289
select distinct ressourceid from omraaderessource where omraadeid = 9  -> 49

Men jeg har lige fundet en løsning ved at rode lidt frem og tilbage:

select id from ressource
where id not in(select ifnull(ressourceid,0) from omraaderessource where omraadeid =9)

Jeg forstår det ikke helt, da der ikke er nogen poster med null-værdier i omraaderessource-tabellen.

Men det virker og jeg får alle mine ønskede poster ud.

Tak for din tid.
Avatar billede trer Nybegynder
15. april 2004 - 12:06 #6
Tak for points - omend de var ufortjente da jeg ikke kom med en løsning.

Umiddelbart ville jeg nok levere en bugreport til MySQL på ovenstående - bakket op med eksempel hvis du kan reproducere problemet i en db i samme version.
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