celiaMedlem sedan dec. 20011 080 inlägg
Jag har två tabeller, en för priser och en för specialpriser och de ser likadana ut. I pristabellen finns det poster som inte finns i specialpriser, men det kan också finnas poster i specialpris-tabellen som inte finns i pristabellen (jo jag vet att det är idiotiskt!). Hur ska jag få ut alla produkter från båda tabellerna med rätt pris? Primary/Foreign Key är Id.
PRIS
Id
Produkt
Pris
SPECIAL
Id
Produkt
Pris
headbugMedlem sedan sep. 2006858 inlägg
Är det så att om det finns både ett pris och ett specialpris så är det specialpris som skall visas?
celiaMedlem sedan dec. 20011 080 inlägg
headbug skrev:
Är det så att om det finns både ett pris och ett specialpris så är det specialpris som skall visas?
Japp.
Peter SMedlem sedan dec. 20025 484 inlägg
Nu talar du inte om vilket DBMS som används, men med MySQL kan du testa
select case
when dt.spris is null then dt.pprod
else dt.sprod
end as produkt
, coalesce(dt.spris,dt.ppris) as pris
from
(select p.id as pid
, s.id as sid
, p.produkt as pprod
, s.produkt as sprod
, p.pris as ppris
, s.pris as spris
from pris p
left
join special s
on p.id = s.id
union
select p.id as pid
, s.id as sid
, p.produkt as pprod
, s.produkt as sprod
, p.pris as ppris
, s.pris as spris
from pris p
right
join special s
on p.id = s.id) dt;
Finns stöd för FULL OUTER JOIN blir subqueryn litet mindre:
select p.id as pid
, s.id as sid
, p.produkt as pprod
, s.produkt as sprod
, p.pris as ppris
, s.pris as spris
from pris p
full
outer
join special s
on p.id = s.id
(Något sådant i alla fall.)
celiaMedlem sedan dec. 20011 080 inlägg
Jag använder Access. Stöder Access Full outer join?
Peter SMedlem sedan dec. 20025 484 inlägg
Tveksamt. Du får nog försöka dig på den första varianten
select iif(dt.spris is null,dt.pprod,dt.sprod) as produkt
, iif(dt.spris is null,dt.ppris,dt.spris) as pris
from
(select p.id as pid
, s.id as sid
, p.produkt as pprod
, s.produkt as sprod
, p.pris as ppris
, s.pris as spris
from pris p
left
join special s
on p.id = s.id
union
select p.id as pid
, s.id as sid
, p.produkt as pprod
, s.produkt as sprod
, p.pris as ppris
, s.pris as spris
from pris p
right
join special s
on p.id = s.id) dt;
Möjligen kan Access vilja ha fler parenteser kring något uttryck.