Black Friday = Pricewatch Bekijk onze selectie van de beste Black Friday-deals en voorkom een miskoop.
Toon posts:

[Access/SQL] Inner Join samen met een Right Join

Pagina: 1
Acties:

Verwijderd

Topicstarter
Yo Gasten,
Ik heb een query om te kijken hoevaak bepaalde combinaties voorkomen per maand voor een jaar. Mijn query werkt in principe perfect, echter zit ik nog met het volgende probleem:
Wanneer bepaalde categorieën waar ik op group in een jaar niet voorkomen dan krijg ik deze categorieën niet te zien in mijn resultaten. (Logisch natuurlijk omdat ik gebruik maak van een inner join) Nu dacht ik dat dit niet zo'n probleem zou zijn, als ik een right join gebruik op de tabel met de categorieën zou ik gewoon alles moeten krijgen. Echter is dit niet mogelijk in MS Access. Ik krijg dan een foutmelding dat ik een ongeldige join gebruik.
Hieronder mijn originele query:
code:
1
2
3
4
5
6
7
8
TRANSFORM count(BR.br_datum)
SELECT TR_Desc.Description, count(BR.br_datum) AS Totaal
FROM ((SELECT DISTINCT CustomerID, max(DateTime) AS [br_datum] FROM Planner WHERE PlanKindID IN (46,52,53,76,123,124) GROUP BY CustomerID)  AS BR 
INNER JOIN (SELECT DISTINCT CustomerID, PlanKindID, DateTime FROM Planner WHERE PlanKindID IN(33,34,47,49,50,54,55,62,63,64,65,66,67,75,107,119,120,121))  AS TR ON BR.CustomerID = TR.CustomerID) 
INNER JOIN (SELECT PlanKindID, Description FROM PlanKind)  AS TR_Desc ON TR.PlanKindID = TR_Desc.PlanKindID
WHERE Year(BR.br_datum) = 2008  AND BR.br_datum < TR.DateTime
GROUP BY TR_Desc.Description
PIVOT format(BR.br_datum,"mmm") IN ("jan","feb","mrt","apr","mei","jun","jul","aug","sep","okt","nov","dec");


Het gaat om deze join:
code:
1
INNER JOIN (SELECT DISTINCT CustomerID, PlanKindID, DateTime FROM Planner WHERE PlanKindID IN(33,34,47,49,50,54,55,62,63,64,65,66,67,75,107,119,120,121))  AS TR ON BR.CustomerID = TR.CustomerID)


Ik zou dus al die PlanKindID's in mijn resultaat willen hebben, maar krijg nu natuurlijk alleen die planKindID's die een CustomerID overeenkomstig hebben vanuit de eerste selectie.

Iemand hier een idee? Alvast super bedankt!

Groeten Pheanix

Verwijderd

Topicstarter
:( Is deze ook voor de echte sql guru's te moeilijk? Of zit ik helemaal fout te denken en moet ik dit heel anders aanpakken?

  • pedorus
  • Registratie: Januari 2008
  • Niet online
Het lijkt me dat als je naar de help van join kijkt, er ook iets uitgelegd wordt over het gebruik van haakjes en het gebruik van left/right/outer. Een join van het type "a left b inner c" heeft waarschijnlijk haakjes nodig, omdat meerdere interpretaties mogelijk zijn.

Verder vraag ik me bijvoorbeeld af of al die virtuele tabellen in de from nodig zijn, en waarom er een join gedaan wordt met een afwijkend lijstje planId's.

offtopic:
Ik kan me voorstellen dat mensen zijn afgehaakt vanwege je posthistory (alleen vragen, 2 sluitingen), het gebruik van aanhef/groeten, geen code=sql, enz.

Vitamine D tekorten in Nederland | Dodelijk coronaforum gesloten


  • justmental
  • Registratie: April 2000
  • Niet online

justmental

my heart, the beat

Het lijkt me sterk dat access helemaal geen right joins kan.
Misschien is het een beperking dat je niet kunt outer joinen naar een query.
Probeer anders eens een view te maken van de te joinen query en die hier te gebruiken.

Who is John Galt?


  • Lustucru
  • Registratie: Januari 2004
  • Niet online

Lustucru

26 03 2016

Een LEFT JOIN of een RIGHT JOIN kan worden genest in een INNER JOIN, maar een INNER JOIN kan niet worden genest in een LEFT JOIN of een RIGHT JOIN. Zie de bespreking over nesten in het onderwerp INNER JOIN voor uitleg over het nesten van joins binnen andere joins.
Dit komt uit de help van office, maar vziw krijg je bijna dezelfde tekst voor je neus als je de query probeert te runnen.
Ik krijg dan een foutmelding dat ik een ongeldige join gebruik.
Daar om is het ook zo belangrijk om foutmeldingen helemaal te lezen ;)

De oever waar we niet zijn noemen wij de overkant / Die wordt dan deze kant zodra we daar zijn aangeland