webForumDet fria alternativet

Join-problematik

5 svar · 465 visningar · startad av celia

celiaMedlem sedan dec. 20011 080 inlägg
#1

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
#2

Ä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
#3

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
#4

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
#5

Jag använder Access. Stöder Access Full outer join?

Peter SMedlem sedan dec. 20025 484 inlägg
#6

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.

Genererad på 371 ms · cache AV · v20260730165559-full.f96bc7eb