Toon posts:

[SQL] query/ASP probleem

Pagina: 1
Acties:

Verwijderd

Topicstarter
OK,ik heb dus een SQL query, die uit een .mdb (Microsoft Acces Database extensie) database gegevens haalt. De structuur van de database is als volgt:

Afbeeldingslocatie: http://members.home.nl/t.timmers/DATABASE_STRUCTURE.PNG

ff een opmerking tussendoor: Ik heb de database niet bedacht, dus commentaar hierop is niet echt nuttig voor mij! Ik weet dat er vast veel dingen zijn die niet netjes of iets dergelijks zijn, dus ...

Wat ik nu dus wil is het volgende:
Ik wil alle studenten uit de database halen, met de volgende gegevens:
- STUDENT_ID
- VOORNAAM
- ACHTERNAAM
- BEDRIJFS_ID
- BEDRIJFS_NAAM
- ADRES
- WOONPLAATS
- POSTCODE
- CONTACT_PERSOON
- EMAIL
- AANVANGSDATUM

Op zich geen probleem, ik had zelf het volgende bedacht:

select STUDENT.STUDENT_ID, STUDENT.VOORNAAM, STUDENT.ACHTERNAAM, BEDRIJF.BEDRIJFS_NAAM, BEDRIJF.ADRES, BEDRIJF.POSTCODE, BEDRIJF.WOONPLAATS, BEDRIJF.CONTACT_PERSOON, BEDRIJF.EMAIL, STAGE_PLAATS.AANVANGSDATUM from STUDENT INNER JOIN (BEDRIJF inner join STAGE_PLAATS on BEDRIJF.BEDRIJF_ID = STAGE_PLAATS.BEDRIJF_ID) on STUDENT.STUDENT_ID = STAGE_PLAATS.STUDENT_ID where STUDENT.ACHTERNAAM='" & achternaam & "'"

(heb geen
SQL:
1
gebruikt, omdat dit de layout verneukt! :( )

Werkt prima, het enigste probleem is dat wanneer ik een student kies die geen stageplaats heeft er niks wordt getoond! Dus geen Voornaam, achternaam, etc.

Wat ik dus graag zou willen is dat als een student geen stageplaats heeft, toch zijn gegevens worden weergegeven. Dus alleen zijn persoonlijke gegevens (STUDENT-ID, VOORNAAM en ACHTERNAAM), alleen weet ik niet hoe ik dit moet doen! Iemand suggesties ?

Verwijderd

Met een LEFT JOIN ipv een INNER JOIN kan je dit probleem oplossen. Een beetje expirimenteren en je komt er wel uit.

Succes :)

Verwijderd

Topicstarter
Hmm, een LEFT JOIN, hoe moet ik dat zien ? Ik bedoel wat doet die ? Ik weet (nog) niet zo heel veel van SQL, alleen de basis zeg maar!

En LEFT JOIN hoort denk ik niet echt bij de basis ? :)

Anyway zou je het ff kunnen toelichten wat het doet enzo ?

  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 21:28

Creepy

Tactical Espionage Splatterer

Verwijderd schreef op 16 February 2003 @ 18:41:
Hmm, een LEFT JOIN, hoe moet ik dat zien ? Ik bedoel wat doet die ? Ik weet (nog) niet zo heel veel van SQL, alleen de basis zeg maar!
Je gebruikt een innerjoin, maar snapt niet wat een left join is?
En LEFT JOIN hoort denk ik niet echt bij de basis ? :)
Hmm.. toch wel.
Anyway zou je het ff kunnen toelichten wat het doet enzo ?
Probeer het, en je weet het ;))

Ff snel uitgelegd:
Als je 2 tabellen samenvoegt krijg je een cartegiaans (eehh.. spelling?) produkt. d.m.v. een join kan je de juiste rijen selecteren. De "hoofd tabel" is links, de tabel waarmee je joint (JOIN <tabel>) is de rechter tabel.

Een left join selecteert de de rijen vanaf de hoofdtabel. Rijen die leeg zijn in de rechter tabel worden dus wel getoond, rijen die leeg zijn in de linker tabel niet.

Voor een veel betere uitleg zou je er een willkeurige SQL tutorial/boek o.i.d. bij kunnen pakken.

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


Verwijderd

code:
1
BEDRIJF inner join STAGE_PLAATS on BEDRIJF.BEDRIJF_ID = STAGE_PLAATS.BEDRIJF_ID


Wil zeggen: laat mij alle records zien waarvan de kolom BEDRIJF_ID overeenkomt.

code:
1
BEDRIJF left join STAGE_PLAATS on BEDRIJF.BEDRIJF_ID = STAGE_PLAATS.BEDRIJF_ID


Wil zeggen: Laat mij alle records uit BEDRIJF zien en als er records in STAGE_PLAATS staan die overeenkomen op BEDRIJF_ID dan wil ik die samenvoegen.

Dus inderdaad precies wat jij wilt.

Overigens, als je je dan toch aan het verdiepen bent in SQL: volgens mij is de standaard dat je alle SQL keywords (SELECT, INSERT, WHERE etc) in UPPERCASE zet en alle kolomnamen in lowercase. Beetje zeikerig, ik weet het, maar alles in UPPERCASE maakt het allemaal zo moeilijk leesbaar.

Verwijderd

Topicstarter
ok, ik begrijp nu wat een LEFT JOIN zou moeten doen! Het enige probleem is nu dat ik het niet werkende krijg, hij geeft een error als ik de SQL query wil uitvoeren:

Error Type:
Microsoft JET Database Engine (0x80040E14)
Join expression not supported.
/ASP/Opdracht_3_Week_2.asp, line 43


En Line 43 is dan mijn rs.Open sql,conn code!
Hij gaat de query met LEFT JOIN dus uitvoeren in een acces database! Ondersteunt MS Acces de LEFT JOIN ? Of doe ik nu wat verkeerd ?

ok, ik meen me te herinneren dat men dan iets moet instellen in de relaties tussen de tabellen! Hoe doe je dat dan ?

[ Voor 12% gewijzigd door Verwijderd op 16-02-2003 20:12 ]


Verwijderd

Access ondersteunt het zeker. Probeer de query gewoon samen te stellen in de query builder. als je met de rechtermuisknop op de relatie (het streepje tussen de 2 tabellen) klikt kun je instellen dat de query een LEFT ipv een INNER join gebruikt, hij legt het verschil dan zelfs in gewone mensen taal uit!
Pagina: 1