Avatar billede Lasse S Novice
20. august 2004 - 15:32 Der er 5 kommentarer og
1 løsning

left joins eller andre joins

Hej eksperter

Jeg har to tabeller:
1) IMR_publikation
id (primærnøgle)
listepris
m.m.

2) IMR_pub_tilbudspris
pub_id (fremmednøgle)
tilbudspris
startdato
slutdato

Der er en nul-til-mange relation, således at en publikation kan have alt mellem 0 og mange tilbudspriser tilknyttet, mens en tilbudspris er knyttet udelukkende til én publikation.

Jeg vil gerne vise prisen, enten listenprisen eller en tilbudspris hvis den gælder på det tidspunkt, hvis brugeren er på sitet.

Jeg kan finde ud af at søge både pris og og tilbudspris på følgende måde:

SELECT p.id, p.listepris, tilbud.tilbudspris
FROM imr_publikation AS p
LEFT JOIN imr_pub_tilbudspris AS tilbud
ON p.id = tilbud.pub_id

SÅ får jeg vist alle publikationer og deres eventuelt tilknyttede tilbudspris (eller blot 'NULL' som tilbudspris)

Men jeg kan ikke finde ud af sætte en WHERE-betingelse ind, så je gkun får tilbudspriser, der er gældende lige nu. Fx fejler følgende:

SELECT p.id, p.listepris, tilbud.tilbudspris
FROM imr_publikation AS p
LEFT JOIN imr_pub_tilbudspris AS tilbud
ON p.id = tilbud.pub_id
WHERE tilbud.startdato <= now()
AND tilbud.slutdato <= now()

Dette viser mig kun publikationer, hvor der er nuværende tilbud, og ingen andre publikationer. Det jeg vil have er jo alle publikationer, men kun tilbudspris hvis den er gældende...

Hvem kan hjælpe?

:o) Lasse
Avatar billede arne_v Ekspert
20. august 2004 - 15:34 #1
SELECT p.id, p.listepris, tilbud.tilbudspris
FROM imr_publikation AS p
LEFT JOIN imr_pub_tilbudspris AS tilbud
ON p.id = tilbud.pub_id
WHERE tilbud.startdato <= now()
AND tilbud.slutdato >= now()

eller


SELECT p.id, p.listepris, tilbud.tilbudspris
FROM imr_publikation AS p
LEFT JOIN imr_pub_tilbudspris AS tilbud
ON p.id = tilbud.pub_id AND tilbud.startdato <= now() AND tilbud.slutdato >= now()
Avatar billede Lasse S Novice
20. august 2004 - 15:57 #2
det første var et dump fra mig selv, som ikke virkede...
men dit andet forslag sad lige i skabet, mange tak, smid et svar, og god weekend!
:o) lasse
Avatar billede arne_v Ekspert
20. august 2004 - 15:58 #3
svar
Avatar billede arne_v Ekspert
20. august 2004 - 15:59 #4
og mit første forslag var *ikke* ens med dit - jeg havde vendt den sidste
<= om til en >=
Avatar billede Lasse S Novice
20. august 2004 - 16:01 #5
aah, men ville det virke, eller ville det ikke give mig samme problemer som før (ligesom et inner join) (har lukket testserveren ned,kan ikke teste ligenu)?

men ok, jeg giver mig, det er jo dig der har styr på sql'en her! ;o)
Avatar billede arne_v Ekspert
20. august 2004 - 16:03 #6
Nej jeg tror faktisk heller ikke at det virker.
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