[ACCESS] Subselect in Left join statement

Pagina: 1
Acties:

  • Basszje
  • Registratie: Augustus 2000
  • Laatst online: 12:24

Basszje

Reisvaap!]

Topicstarter
Goedemorgen,

Ik heb weer een hopeloos probleem . Ik probeer de volgende query in access te krijgen :

code:
1
2
3
4
5
6
7
SELECT DISTINCT  VESTIGINGEN.VESTIGING_ID, CONTROLENR, DLN_ID, * 
FROM
(VESTIGINGEN INNER JOIN VESTIGINGID_DLNID ON VESTIGINGID_DLNID.VESTIGING_ID = VESTIGINGEN.VESTIGING_ID)
LEFT  JOIN BEDRIJF_ARTGRP_OMZET ON VESTIGINGEN.VESTIGING_ID = 
( SELECT DISTINCT VESTIGING_ID FROM BEDRIJF_ARTGRP_OMZET
WHERE MAAND_WEEK = 9 AND JAAR = 2002 GROUP BY VESTIGING_ID)
ORDER BY DLN_ID


Kijk niet naar de ultiem ranzig database opbouw, daar heb ik niets mee te maken gehad, ik moet iets fixen. dat betekent dus dat ik de DB niet kan veranderen :{ .

Maar goed waar het mis gaat is de left join, ik wil n.l. de tweede helft van de vergelijking als een subquery hebben.

De query moet n.l. alle records uit vestingen hebben en daarbij moet ik straks sorteren op een mogelijk waarde in bedrijf_artgrp_omzet. Als ik dus de where statement bij de normale where zet krijg ik (logisch ) alleen de vestiging_id's terug die bestaan in bedrijf_artgrp_omzet.

Heeft iemand een idee hoe ik dit beter kan doen oid, want ik kom er even niet meer uit ;)

Beware of listening to the imposter; you are undone if you once forget that the fruits of the earth belong to us all, and the earth itself to nobody.


  • akakiwi
  • Registratie: September 2000
  • Laatst online: 20-03 11:13

akakiwi

I believe in the ruling class.

Je moet die SELECT uit de LEFT JOIN halen, de koppeling gewoon doen na al het JOIN gedoe, en dan het selectie criterium op het geheel van de SELECT doen.
code:
1
2
3
4
5
6
7
8
SELECT DISTINCT  VESTIGINGEN.VESTIGING_ID, CONTROLENR, DLN_ID, * 
FROM (VESTIGINGEN
  INNER JOIN VESTIGINGID_DLNID 
  ON VESTIGINGID_DLNID.VESTIGING_ID = VESTIGINGEN.VESTIGING_ID)
  LEFT  JOIN BEDRIJF_ARTGRP_OMZET 
  ON VESTIGINGEN.VESTIGING_ID = BEDRIJF_ARTGRP_OMZET.ID
WHERE BEDRIJF_ARTGRP_OMZET.MAAND_WEEK = 9 AND BEDRIJF_ARTGRP_OMZET.JAAR = 2002 
ORDER BY DLN_ID

| Life is a game (and games are fun) | homepage |


  • Basszje
  • Registratie: Augustus 2000
  • Laatst online: 12:24

Basszje

Reisvaap!]

Topicstarter
Uhm zoals ik net al zei schiet dat dus niet erg op, omdat je dan het probleem krijgt met vestiging_id's die niet voorkomen in de left join tabel ( bedrijf_artgrp_omzet ) , deze worden dan ook niet meegenomen ( want maand_week en jaar is immer ook niets dan ) . En deze moeten dus wel erbij :)

Ik zal het eigenlijk eens proberen met een maand_week = 9 or maand_week = null statement, maar volgens mij werkt dat ook niet.

Beware of listening to the imposter; you are undone if you once forget that the fruits of the earth belong to us all, and the earth itself to nobody.


  • cameodski
  • Registratie: Augustus 2002
  • Laatst online: 06-11-2023
Het is me eerlijk gezegd niet helemaal duidelijk wat je nu zoekt, maar het lijkt erop dat het iets in de volgende richting is:
code:
1
2
3
4
SELECT *
FROM vestigingen v
LEFT OUTER JOIN bedrijf_artgrp_omzet bao ON (bao.vestiging_id = v.vestiging_id AND bao.jaar = 2002 and bao.maand_week = 9)
ORDER BY ....

Mocht dit niet zijn, wat je zoekt, dan is het misschien een idee om je even de db-structuur (voorzover relevant) hier te posten.
En misschien wat duidelijker/anders omschrijven wat je zoekt. :)

Never underestimate the power of


  • Basszje
  • Registratie: Augustus 2000
  • Laatst online: 12:24

Basszje

Reisvaap!]

Topicstarter
okee bedankt voor laatste idee, dat helpt me wel iets verder.

Het probleem alleen is nu dat met die left outer join alleen de records terugkrijg die bestaan in de BAO tabel.

Echter ik moet OOK de records terugkrijgen die dus niet bestaan in die tabel ( daar dus de vestiging id van van vestingen tabel ). Het probleem is dus dat ik dan niet kan querien op jaar en maand_week omdat deze dus in de BAO tabel staan ( en dus de rijen die daar niet bestaan jaar / maand_week als NULL hebben en dus niet terugkomen ) .

Wat ik dus wil is dit :

Vestingen
(distinct) vesting_id

JOIN -

Bedrijf_artgrp_omzet
where jaar = 2002 && maand_week = 8
|| jaar = null && maand_week = null

ORDER by maand_week, jaar ( nog niet gedaan, maar da's de moeite niet )

Als het goed is krijg je dan een recordset met de vestiging_id's ge-orderd naar "bestaat in bedrijf_artgrp_omzet" en " bestaat niet in bedrijf_artgrp_omzet"

Dit omdat de output waar het allemaal heengaat eerst de gevulde moet hebben en dan de ongevulden ( vraag me niet waarom , maar tis brak dus :{ ) .

Hopelijk is het zo wat duidelijker ;)

Beware of listening to the imposter; you are undone if you once forget that the fruits of the earth belong to us all, and the earth itself to nobody.


  • cameodski
  • Registratie: Augustus 2002
  • Laatst online: 06-11-2023
De left outer join doet denk ik datgene wat jij wilt. Alle vestigingen komen terug en als er ook het een en ander in bao zit, krijg je daar ook wat uit.
Komt er dus voor een bepaalde vestiging voor het opgegeven jaar en maand geen record voor dan krijg je toch de vestiging in je resultset. De constructie met (jaar is null && maand_week is null) is daardoor overbodig.

Never underestimate the power of


  • Basszje
  • Registratie: Augustus 2000
  • Laatst online: 12:24

Basszje

Reisvaap!]

Topicstarter
cameodski schreef op 14 oktober 2002 @ 11:23:
De left outer join doet denk ik datgene wat jij wilt. Alle vestigingen komen terug en als er ook het een en ander in bao zit, krijg je daar ook wat uit.
Komt er dus voor een bepaalde vestiging voor het opgegeven jaar en maand geen record voor dan krijg je toch de vestiging in je resultset. De constructie met (jaar is null && maand_week is null) is daardoor overbodig.
Uhm vaag, want dat deed hij dus juist niet :?

Maar ik heb het al anders opgelost. Ik doe nu een query met betreffende left join select en eentje met die constructie in de subselect en dan where not in ( ultiem ranzig, maar het moet eerder snel gefixd zijn dan snel werken :P ) .

Maar goed bedankt voor de tip iig :)

Beware of listening to the imposter; you are undone if you once forget that the fruits of the earth belong to us all, and the earth itself to nobody.


  • cameodski
  • Registratie: Augustus 2002
  • Laatst online: 06-11-2023
Ik dacht dat je op zoek was naar een betere oplossing, maar dat was dus een vergissing. Het is inderdaad ultiem ranzige query.
En dat de db-structuur ranzig is, durf ik nog niet te beweren.

Never underestimate the power of


  • Basszje
  • Registratie: Augustus 2000
  • Laatst online: 12:24

Basszje

Reisvaap!]

Topicstarter
cameodski schreef op 14 oktober 2002 @ 11:51:
Ik dacht dat je op zoek was naar een betere oplossing, maar dat was dus een vergissing. Het is inderdaad ultiem ranzige query.
En dat de db-structuur ranzig is, durf ik nog niet te beweren.
Beweer dat maar ;) . Zoals al gezegd trouwens is dit niet mijn oplossing / werk, maar ik moet slechts iets oplossen. En het liefst met zo weinig mogelijk veranderingen, want het zutje is niet echt ' transparent ' n.l. ;) .

Trouwens ( tussen haakjes ) zou je bij een nette oplossing nooit hoeven te vervallen tot dergelijke SQL Query's :)

Beware of listening to the imposter; you are undone if you once forget that the fruits of the earth belong to us all, and the earth itself to nobody.


  • cameodski
  • Registratie: Augustus 2002
  • Laatst online: 06-11-2023
Basszje schreef op 14 oktober 2002 @ 12:08:
Beweer dat maar ;) . Zoals al gezegd trouwens is dit niet mijn oplossing / werk, maar ik moet slechts iets oplossen. En het liefst met zo weinig mogelijk veranderingen, want het zutje is niet echt ' transparent ' n.l. ;) .
:) :)
Trouwens ( tussen haakjes ) zou je bij een nette oplossing nooit hoeven te vervallen tot dergelijke SQL Query's :)
Zeg nooit nooit, maar ik kan me in dit geval niet aan de indruk onttrekken, dat hier een beter leesbare en snellere query mogelijk is. En als dat mogelijk is, lijkt het me zinvol om je af vragen waarom je dat dan niet zou doen?
En kan het zijn, dat het niet transparant is, omdat je niet weet wat precies de bedoeling is van deze query? Als dat zo is, kan ik me wel een beetje voorstellen, dat je overgaat tot allerlei kunstgrepen.

Never underestimate the power of

Pagina: 1