Gå til innhold

Anbefalte innlegg

Sett at tabellen 'pristabell' inneholder mange prislister hvor en gitt prisliste kan finnes i mange versjoner med forskjellig dato. Jeg ønsker å sammenligne prisene i den ene mot den andre, men jeg vil ha ut alle varene fra den første filen selv om de kanskje ikke finnes i den andre.

 

Jeg prøver under her å få ut prisliste 'xx' for 2014 og 2015. Det finnes varer i den nyeste versjonen som ikke fantes i den gamle, men jeg får kun ut de varene som finnes i begge. Altså om jeg bruker LEFT JOIN, eller INNER JOIN, får jeg samme resultat. 

Select A.varenr, A.dato, A.pris, B.dato, B.pris
FROM pristabell A
LEFT JOIN pristabell B on
A.prisliste = B.prisliste and
A.varenr = B.varenr
WHERE
A.prisliste = 'xx' and
A.dato = '20150101' and
B.dato = '20140101'

Hvis jeg derimot bruker LEFT JOIN for å hente data fra en helt annen fil, fungerer det fint. I eksempelet her tar jeg ut den alternative enheten til alle varene i prisliste 'xx'. Det er ikke alle varene som faktisk har en alternativ enhet, men jeg får likevel ut alle varene fra prislisten i denne spørringen. 

Select A.varenr, A.dato, A.pris, C.alternativenhet
FROM pristabell A
LEFT JOIN enheter C on
A.varenr = C.varenr
WHERE
A.prisliste = 'xx'
A.dato = '20150101'

Noen tips?

Lenke til kommentar
Videoannonse
Annonse

outer join eller union.

 

med left join får du alt du ber om i den ene og det som matcher i den andre prislista, ikke alt fra begge. når det blir det samme med inner join kommer det kun av at ingen varer er utgått fra 2014 til 15.

Lenke til kommentar

med left join får du alt du ber om i den ene og det som matcher i den andre prislista

Ja, det er dette jeg prøver på.

 

Prislisten for 2015 inneholder følgende varer:

111

222

333

444

 

Prislisten for 2014 inneholder:

111

222

555

 

I uttrekket mitt vil jeg ha følgende:

111 (pris for 2015 og 2014)

222 (pris for 2015 og 2014)

333 (kun pris for 2015)

444 (kun pris for 2015)

 

Det jeg faktisk får, uansett om jeg bruker INNER JOIN, LEFT JOIN, LEFT OUTER JOIN, FULL JOIN, eller FULL OUTER JOIN er:

111 (pris for 2015 og 2014)

222 (pris for 2015 og 2014)

 

 

Nå tror jeg kanskje problemet mitt ikke skyldes at det er samme fil som benyttes to ganger, men at den sekundære tabellen er 'pristabellen'. Jeg forsøkte å bruke hele vareregisteret som den primære tabellen, og pristabellen som den sekundære. Med LEFT (OUTER) JOIN hadde jeg forventet å få ut hele vareregisteret, med pris på de få varene hvor dette er aktuelt. I stedet fikk jeg altså kun de varene som faktisk finnes i den valgte prislisten.

 

Bytter jeg ut 'pristabellen' med 'enhetstabellen' (hvor kun noen få varer finnes), da fungerer det akkurat som det skal. Jeg får ut hele vareregisteret uansett, og noen få av disse varene er altså merket med en 'alternativ enhet'. 

 

Jeg tror konklusjonen er at jeg egentlig gjør det riktig, men at det er noe med denne 'pristabellen' som krever at det gjøres på en mer spesiell måte.

 

Edit: Jeg fant idiotfeilen min...

 

Opprinnelig kode:

Select A.varenr, A.dato, A.pris, B.dato, B.pris
FROM pristabell A
LEFT JOIN pristabell B on
A.prisliste = B.prisliste and
A.varenr = B.varenr
WHERE
A.prisliste = 'xx' and
A.dato = '20150101' and
B.dato = '20140101'

Fungerende kode:

Select A.varenr, A.dato, A.pris, B.dato, B.pris
FROM pristabell A
LEFT JOIN pristabell B on
A.prisliste = B.prisliste and
A.varenr = B.varenr and
B.dato = '20140101'
WHERE
A.prisliste = 'xx' and
A.dato = '20150101'
Endret av Bradbury
Lenke til kommentar

 

med left join får du alt du ber om i den ene og det som matcher i den andre prislista

Ja, det er dette jeg prøver på.

 

I det første innlegget ditt fikk jeg inntrykk av at du ville ha full prisliste fra både 2014 og 2015, uavhengig om varen bare er i den ene - eller andre - lista. 

Lenke til kommentar

Takk, det var det jeg fant ut. Jeg prøvde å fremheve linjen med rød farge, men formateringen blir selvfølgelig ignorert siden jeg brukte [ code ].

 

Så det rett etter at jeg hadde postet :)  

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...