webForumDet fria alternativet

En join på tre tabeller...

6 svar · 561 visningar · startad av Troxy

TroxyMedlem sedan mars 20041 505 inlägg
#1

Hej, är lite snurrig just nu. Jag försöker göra en join på tre tabeller med MSSQL.

Min första tabell innehåller ett register över produkter hos en leverantör. Varje produkt har ett artikelnr.

Sedan har jag två tabeller som innehåller lagerstatus för två butiker, med artikelnr från leverantören.

Nu vill jag helt enkelt få ut hur många produkter av varje sort som de två butikerna har genom att joina ihop tabellerna med artikelnr och sedan köra count!

Tacksam för hjälp...

LarsGMedlem sedan dec. 200012 464 inlägg
#2
select artikel,
 (select count(*)
     from butik1
    where artikelnr = r.artikelnr),
(select count(*)
     from butik2
    where artikelnr = r.artikelnr)
  from register as r
TroxyMedlem sedan mars 20041 505 inlägg
#3

Tack tack det där var en bra hjälp på vägen.

Nu listar den dock alla produkter, även om de inte finns i någon av butikernas lager.
Kan jag på något sätt rensa bort alla produkter där lagerstatus är 0?

Det verkar inte gå att köra WHERE-satser på fälten i alla fall...då får jag "Unknown field".

emissionMedlem sedan dec. 19996 721 inlägg
#4

Visst kan du köra WHERE-satser.

Vad har du för kolumner i butiks-tabellerna?

TroxyMedlem sedan mars 20041 505 inlägg
#5
SELECT
titel,
(SELECT COUNT(*) FROM butikslager1 WHERE artnr = r.artnr) AS lager1,
(SELECT COUNT(*) FROM butikslager2 WHERE artnr = r.artnr) AS lager2
FROM centrallager AS r
WHERE (lager1 > 0) AND (lager2 > 0)

När jag kör den här SQL-frågan så får jag felmeddelande "Unknown field lager1" som svar.

emissionMedlem sedan dec. 19996 721 inlägg
#6

Jaså, du menade så. Nej, alias kan inte användas i WHERE-satser. Du kan ange subselectarna i WHERE-satsen i stället. Det ser inte så snyggt ut, men det funkar och är effektivare än man kan ana.

Om du har något nyckelliknande värde i butikslager-tabellerna så kan du också göra så här:

SELECT
r.titel,COUNT(DISTINCT b1.nyckel) as lager1,COUNT(DISTINCT b2.nyckel) FROM centrallager r
LEFT OUTER JOIN butikslager1 b1 ON b1.artnr = r.artnr,
LEFT OUTER JOIN butikslager2 b12 ON b2.artnr = r.artnr,
WHERE (COUNT(DISTINCT b1.nyckel)+COUNT(DISTINCT b2.nyckel))>0
GROUP BY r.artnr,r.titel
TroxyMedlem sedan mars 20041 505 inlägg
#7

Tack för hjälpen, jag fick ihop det tack vare er.

141 ms totalt · 3 externa anrop · v20260731065814-full.beb2e261
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
137 ms — hämta tråd, inlägg och bilagor (db)