Avatar billede sath Novice
24. maj 2016 - 10:39 Der er 4 kommentarer og
1 løsning

Left outer join - giver "join svaret" på alle linjer

Hej

Jeg har forsøgt mig med min første kode. Den ser sådan ud.

use AXDB50
select    p.DATAAREAID as 'Selskab',p.PROJID as 'Projektnummer',MAX(PROJCOSTTRANS.TRANSDATE) as 'Sidste udgiftsdato'
   
from projtable as p,PROJCOSTTRANS as u,PROJTABLE as p2

left outer join PROJCOSTTRANS
on p2.PROJID = PROJCOSTTRANS.PROJID
and p2.DATAAREAID = PROJCOSTTRANS.DATAAREAID

where p2.DATAAREAID = 'kv'
and PROJCOSTTRANS.DATAAREAID = 'kv'
and p.DATAAREAID = 'kv'
and u.DATAAREAID = 'kv'

group by p.PROJID, p.DATAAREAID

Jeg tror det er et let problem for nogen, men den driller mig.
Resultatet er:
KV    1    2016-05-02
KV    13    2016-05-02
KV    1307    2016-05-02
KV    13070008 2016-05-02

Men burde være:
KV    1    NULL
KV    13    NULL
KV    1307    NULL
KV    13070008 2016-05-02

Det vil sige, at den gentager datoen på alle linjer - selvom datoen kun burde komme på den sidste linje

Nogen der kan se fejlen?
Avatar billede Slettet bruger
24. maj 2016 - 10:51 #1
Du har tabellen PROJCOSTTRANS med to gange - bånde som alm. join og som outer join. Så du vil kun får rækker retur hvor PROJCOSTTRANS er udfyldt.
Avatar billede sath Novice
24. maj 2016 - 11:50 #2
Tak for hurtigt svar, men jeg forstår det desværre ikke.

Du skriver, at jeg kun får rækker retur, hvor projcosttrans er udfyldt. Men jeg får jo faktisk projcosttrans datoen med på alle rækker - selvom den kun burde komme på den nederste række.

Hvad skal jeg skrive om?
Avatar billede Slettet bruger
24. maj 2016 - 13:43 #3
Du har både projtable og pejcosttrans med to gange - hvorfor?

Jeg tror kun du behøvet dette:

select p.DATAAREAID as 'Selskab',
p.PROJID as 'Projektnummer',
MAX(PROJCOSTTRANS.TRANSDATE) as 'Sidste udgiftsdato'
from projtable as p
left outer join PROJCOSTTRANS
  on PROJCOSTTRANS.PROJID = p.PROJID
and PROJCOSTTRANS.DATAAREAID = p.DATAAREAID
where p.DATAAREAID = 'kv'
24. maj 2016 - 14:07 #4
Ja, jeg var lige igang med at foreslå at prøve det raph skriver og se om det fører til det du ønsker.  Jeg ville gøre det lidt kortere og mere overskueligt ved også at bruge alias for tabellen PROJCOSTTRANS, såsom:

select p.DATAAREAID as 'Selskab',
p.PROJID as 'Projektnummer',
MAX(u.TRANSDATE) as 'Sidste udgiftsdato'
from projtable as p
left outer join PROJCOSTTRANS as u
  on u.PROJID = p.PROJID
and u.DATAAREAID = p.DATAAREAID
where p.DATAAREAID = 'kv'
Avatar billede sath Novice
24. maj 2016 - 14:22 #5
Tak for svar. Det var en virkelig god første gangs oplevelse med eksperten.dk

De virker begge to, men rahp var først, så det er vel ham, der skal have point.
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