webForumDet fria alternativet

JOIN Fråga

1 svar · 317 visningar · startad av Yoghurt

YoghurtMedlem sedan dec. 200512 inlägg
#1

Hej,

Jag håller på med en JOIN fråga där jag ska hämta data från totalt tre tabeller.

Vi kan lite förenklat förklara tabellerna nedanför,

tblProduct
-> pID
-> mID
-> storeID
-> pGroupID
tblProductAttribute
-> pID
-> storeID
-> paName
-> pGroupID
tblManuFacture
-> mID
-> mName
-> storeID

Vad jag vill åstkomma med detta är att alla produkter under tblProduct ska hämtas utifrån pGroupID och storeID.
storeID behöver alltid kontrolleras då samma databas innehåller data ifrån flera butiker.

Select pID,mID From tblProduct Where storeID = 1, pGroupID = 10

Det som ska hämtas ur tblProductAttribute är paName och även här ska storeID kontrolleras. pGroupID ska även överensstämma med värdet ovan.

Select paName From tblProductAttribute Where storeID = 1 AND pGroupID = tblProduct.pGroupID AND storeID = 1

Exempel på hur jag tänker med tblManuFacture

Select mName From tblManuFacture Where storeID = 1 AND mID = tblProduct.mID

Vad jag har lyckats med är att skapa en JOIN SQL sats som hämtar dessa värden om det finns en passande post till produkten i både tblManuFacture och tblProductAttribute.

Problemet är att det inte alltid finns ett värde kopplat till de två tabellerna och då skrivs det heller inte ut någonting från tabellen tblProduct.

Vad jag vill åstakomma är alltså att jag oberoende om det finns data att hämta ifrån tblManuFacture och tblProductAttribute så ska endå övrig data från tblProduct visas. Samt att det ska bara hämtas data från dom som har storeID = 1 t.ex.

Min icke fungerade kod ser ut såhär i dagsläget,

SELECT tblProductAttribute.pID,tblProductAttribute.pGroupID,tblProduct.pID,tblProductAttribute.pgName,tblProduct.pName,tblProduct.pArticelNumber,tblProduct.pPrice,tblProduct.pText,tblManuFacture.mName,tblManuFacture.mLink,tblProduct.pStockAmount,tblProduct.pImageGroup FROM (( tblProduct INNER JOIN `tblproductattribute` ON  tblProduct.pID = tblProductAttribute.pID) LEFT JOIN tblManuFacture ON tblManuFacture.mID = tblProduct.mID) Where tblproductAttribute.pGroupID = " & objRS("pID") & " AND tblProduct.storeID = " & storeID & " AND tblProduct.pGroupType = 2 Order by tblProductAttribute.pgName"

Skulle uppskatta hjälpen hemskt mycket då jag har hållit på med detta ett tag nu.

@ndersMedlem sedan juni 200032 969 inlägg
#2

Använd left (outer) join för att tillåta poster som inte träffar i alla tabeller. Ett förslag:

SELECT p.pID, p.mID, pa.paName, mf.mName
FROM tblProduct p
LEFT JOIN tblProductAttribute pa ON pa.pGroupID = p.pGroupID AND pa.storeId = 1
LEFT JOIN tblManuFacture mf ON mf.mID = p.mID AND mf.StoreID = 1
WHERE p.StoreID = 1 AND p.pGroupID = 10
269 ms totalt · 3 externa anrop · v20260731065814-full.30151723
131 ms — hämta forumlista (db)
127 ms — hämta statistik (db)
140 ms — hämta tråd, inlägg och bilagor (db)