Inner join voor drie tabellen

Status
Niet open voor verdere reacties.

Excelbat

Gebruiker
Lid geworden
23 mrt 2012
Berichten
402
Goedemorgen,

Meestal kijk ik in het excelgedeelte van HelpMij, dit keer heb ik een SQL vraag.
Het lukt mij wel om twee tabellen te koppelen (overigens doe ik dit in PowerPivot van Excel), en deze werkt dus goed:

Code:
SELECT [tblOpdrachtA].[SdgNr],[tblOpdrachtA].[KST],[tblOpdrachtA].[DatOpdrJaar],[tblOpdrachtA].[DatOpdrMaand],[tblOpdrachtB].[PLZ2]
FROM `d:\database\Bsk\rcOpdrachtA.accdb`.tblOpdrachtA 

INNER JOIN `d:\database\Bsk\rcOpdrachtB.accdb`.tblOpdrachtB ON [tblOpdrachtA].[SdgNr]=[tblOpdrachtB].[SdgNr]

WHERE ([KST] = 8 OR [KST] = 15) AND [DatOpdrJaar] = 15 AND [DatOpdrMaand] = 8 AND [PLZ2] = '30'

Drie tabellen lukt mij niet. Wat is de fout in deze code???? ->

Code:
SELECT [tblOpdrachtA].[SdgNr],[tblOpdrachtA].[KST],[tblOpdrachtA].[DatOpdrJaar],[tblOpdrachtA].[DatOpdrMaand],[tblOpdrachtB].[PLZ2],[tblOpdrachtC].[PLZAbs]
FROM `d:\database\Bsk\rcOpdrachtA.accdb`.tblOpdrachtA 

INNER JOIN `d:\database\Bsk\rcOpdrachtB.accdb`.tblOpdrachtB ON [tblOpdrachtA].[SdgNr]=[tblOpdrachtB].[SdgNr]
INNER JOIN `d:\database\Bsk\rcOpdrachtc.accdb`.tblOpdrachtC ON [tblOpdrachtB].[SdgNr]=[tblOpdrachtC].[SdgNr]

WHERE ([KST] = 8 OR [KST] = 15) AND [DatOpdrJaar] = 15 AND [DatOpdrMaand] = 8 AND [PLZ2] = '30'

Alvast bedankt voor jullie reactie/Excelbat
 
Als ik een query in Access bekijk op basis van 3 tabellen, dan staan er haakjes rondom de eerste Inner Join., Haal ik die weg, dan werkt mijn query niet meer. Wellicht geldt dat voor jou ook. Dus probeer dit eens:
PHP:
SELECT [tblOpdrachtA].[SdgNr],[tblOpdrachtA].[KST],[tblOpdrachtA].[DatOpdrJaar],[tblOpdrachtA].[DatOpdrMaand],[tblOpdrachtB].[PLZ2],[tblOpdrachtC].[PLZAbs]
FROM (`d:\database\Bsk\rcOpdrachtA.accdb`.tblOpdrachtA 
INNER JOIN `d:\database\Bsk\rcOpdrachtB.accdb`.tblOpdrachtB ON [tblOpdrachtA].[SdgNr]=[tblOpdrachtB].[SdgNr]) 
INNER JOIN `d:\database\Bsk\rcOpdrachtc.accdb`.tblOpdrachtC ON [tblOpdrachtB].[SdgNr]=[tblOpdrachtC].[SdgNr]
WHERE ([KST] = 8 OR [KST] = 15) AND [DatOpdrJaar] = 15 AND [DatOpdrMaand] = 8 AND [PLZ2] = '30'
 
Thanx Octafish voor je reactie. Werkt prima. Als je nog een INNER JOIN toevoegt, moeten er ook weer extra haakjes bij:

Code:
SELECT [tblOpdrachtA].[SdgNr],[tblOpdrachtA].[KST],[tblOpdrachtA].[DatOpdrJaar],[tblOpdrachtA].[DatOpdrMaand],[tblOpdrachtB].[PLZ2],[tblOpdrachtC].[PLZAfz],[tblOpdrachtLA].[LA107]

FROM 
[COLOR="#FF0000"][B](([/B][/COLOR]`d:\database\Bsk\rcOpdrachtA.accdb`.tblOpdrachtA 

INNER JOIN
`d:\database\Bsk\rcOpdrachtB.accdb`.tblOpdrachtB ON [tblOpdrachtA].[SdgNr]=[tblOpdrachtB].[SdgNr][COLOR="#FF0000"][B])[/B][/COLOR]

INNER JOIN
`d:\database\Bsk\rcOpdrachtC.accdb`.tblOpdrachtC ON [tblOpdrachtB].[SdgNr]=[tblOpdrachtC].[SdgNr][COLOR="#FF0000"][B])[/B][/COLOR]

INNER JOIN
`d:\database\Bsk\rcOpdrachtLA.accdb`.tblOpdrachtLA ON [tblOpdrachtC].[SdgNr]=[tblOpdrachtLA].[SdgNr]

WHERE ([KST] = 8 OR [KST] = 15) AND [DatOpdrJaar] = 15 AND [DatOpdrMaand] = 8 AND [PLZ2] = '30'

Overigens heb ik ook deze oplossing op internet gevonden:

Code:
SELECT 

AAA.SdgNr,AAA.DatOpdr,AAA.DatOpdrMaand,AAA.DatOpdrJaar,AAA.BstNr,
BBB.Lengte,BBB.Breedte,BBB.Hoogte

FROM

`d:\database\Bsk\rcOpdrachtA.accdb`.tblOpdrachtA as AAA, 
`d:\database\Bsk\rcOpdrachtRegel.accdb`.tblOpdrachtsRegel as BBB

WHERE 

AAA.SdgNr=BBB.SdgNr 
AND AAA.DatOpdrJaar = 15 
AND AAA.DatOpdrMaand = 11
AND BBB.Lengte <> 0
AND AAA.KST = 8

Nogmaals bedankt voor je reactie.

Greetz/Excelbat
 
Je hoeft inderdaad geen Inner Join te gebruiken, je kunt ook gewoon filteren op de koppelvelden. Eigenlijk standaard functionaliteit van SQL dus :).
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan