Hej! Hej igen,Outer join av två select-frågor
Vill kombinera resultatet från två frågor men lyckas inte få till det riktigt.
--första frågan
select g.goodsid, g.goodsname, rg.qty
from recipegoods rg
join goods g on rg.goodsid = g.goodsid
where rg.recipeid='rec_1'
--andra frågan
select gi.goodsid, gi.supplier, isnull(bi.qty,'') as bqty
from goodsitem gi
join batchitem bi on gi.itemid = bi.itemid
where bi.batchid='1000000001'
Resultatet av de två frågorna blir
goodsid goodsname qty
------- --------- ----
r_1 Salt 1.0
r_2 Peppar 1.0
r_3 Fläskfärs 3.0
r_4 Oxfond 2.0
r_8 Nötfärs 10.0
(5 row(s) affected)
goodsid supplier bqty
-------- --------- ----
r_2 Kockens 1.0
r_4 Bong 2.0
r_3 Coop 3.0
r_1 Jozo 0.0
(4 row(s) affected)
Behöver alltså komplettera raderna från första frågan med eventuella träffar från andra frågan.
Vid en yttre join mellan tabellerna goods och goodsitem blir dock resultatet för många träffar ur goodsitem och en begränsning behöver göras genom en join med tabellen batchitem. Följande fungerar, men behöver kompletteras så att man även får ut bi.bqty på något sätt, går det?
select g.goodsid, g.goodsname, rg.qty, gi.goodsid, gi.supplier
from recipegoods rg
join goods g on rg.goodsid = g.goodsid
left outer join goodsitem gi on g.goodsid = gi.goodsid and gi.itemid in (select bi.itemid from batchitem bi where bi.batchid='1000000001')
where rg.recipeid='rec_1'
Detta ger följande
goodsid goodsname qty goodsid supplier
-------- ----------- ----- -------- ---------
r_1 Salt 1.0 r_1 Jozo
r_2 Peppar 1.0 r_2 Kockens
r_3 Fläskfärs 3.0 r_3 Coop
r_4 Oxfond 2.0 r_4 Bong
r_8 Nötfärs 10.0 NULL NULL
(5 row(s) affected)
men problemet är att detta resultat behöver kompletteras med bqty från tabellen batchitem, dvs att jag vill åt fält från alla fyra tabellerna. (Eller kanske att jag krånglat till det för mig? ;O) )
Tacksam för tips!
Mvh SiriSv: Outer join av två select-frågor
har nu kommit på en lösning:
select g.goodsid, g.goodsname, rg.qty, gi.goodsid, gi.supplier, bi.qty as bqty
from recipegoods rg
join goods g on rg.goodsid = g.goodsid
left outer join goodsitem gi on g.goodsid = gi.goodsid and gi.itemid in (select bi.itemid from batchitem bi where bi.batchid='1000000001')
left outer join batchitem bi on gi.itemid = bi.itemid
where rg.recipeid='rec_1'
Detta ger fält från alla fyra tabellerna
goodsid goodsname qty goodsid supplier bqty
-------- ----------- ----- -------- --------- ------
r_1 Salt 1.0 r_1 Jozo 0
r_2 Peppar 1.0 r_2 Kockens 1
r_3 Fläskfärs 3.0 r_3 Coop 3
r_4 Oxfond 2.0 r_4 Bong 2
r_8 Nötfärs 10.0 NULL NULL NULL
(5 row(s) affected)
...
ofta hjälper det att få ner problemet! Tack ändå!
/Siri