Zoek de juiste syntax voor een select query

Status
Niet open voor verdere reacties.

leifoet

Gebruiker
Lid geworden
7 okt 2007
Berichten
326
Ik zoek de passende SELECT Query om een overzicht te kunnen opmaken van de gegevens uit 2 tabellen.

TabelA bevat vb. 10 records = namen
TabelB bevat vb. 50 records = namen + bijpassende verrichtingen

Gewenste structuur van het overzicht :

(regel 1 =) naam van record 1 uit tabelA
(volgende regels =) + alle records/verrichtingen (onder elkaar) uit tabelB met dezelfde naam als record 1 van tabelA

(volgende regel =) naam van record 2 uit tabelA
(volgende regels =) + alle records/verrichtingen (onder elkaar) uit tabelB met dezelfde naam als record 2 van tabelA

etc. voor alle namen uit tabelA met alle verrichten uit tabelB

Mijn probleem : waar en hoe moet ik 'de tabelB' in de query 'selecteren' - al mijn pogingen leveren enkel error berichten

SELECT tabelA.NId, tabelA.Fnaam, tabelA.Vnaam
FROM tabelA
ORDER BY tabelA.Fnaam ASC

Dank voor tips - Leifoet
 
Hoe je je opmaakt wilt hebben komt mij niet echt duidelijk over. Maar om de B tabel in je overzicht op te nemen moet je hem joinen op de verwijssleutel.
 
Het resultaat zoals je dat voor ogen hebt ga je m.i. sowieso nooit krijgen; een dynaset laat alle records volgens een vaste layout zien. Dus ofwel je ziet alle namen bij alle records, ofwel je ziet geen namen. Maar het is niet mogelijk om eerst een record met de naam te zien, en daaronder de verrichtingen. Als dat al zou kunnen, dan krijg je in kolomA de namen (allemaal, of alleen de eerste, dat is nog wel te doen) en vanaf kolom B de verrichtingen. Je krijgt het nooit voor elkaar om in KolomA in rij 1 de naam te zien, en in rij 2 in kolomA het eerste veld van de verrichtingen. En dat moet je dus ook niet willen; een database is gebaat bij een consistente werking waarbij je in één veld (kolom) één attribuut neerzet; geen 2.
Overigens: als je in TabelA alleen de namen hebt en dan vervolgens wilt koppelen met TabelB waar dezelfde namen óók in staan, dan heb je tabelA helemaal niet nodig...
 
Ik dacht om de namen van tabelA te gebruiken als een soort 'naam-kapstok' om telkens de passende activiteiten (=tabelB) eraan te hangen.
Als mijn overzicht ook kan, alléén door gebruik te maken van tabelB, hoe zou die SELECT query dan opgebouwd zijn ?
Dank - Leifoet
 
Zou je een voorbeeld kunnen schetsen (letterlijk) hoe het er uit moet komen te zien of klopt onderstaande?

Nid(TabelA) / Fnaam(TabelA) / Vnaam(TabelA) / activiteit1(TabelB) / activiteit2(TabelB) / ...
Nid(TabelA) / Fnaam(TabelA) / Vnaam(TabelA) / activiteit1(TabelB) / activiteit2(TabelB) / ...
Nid(TabelA) / Fnaam(TabelA) / Vnaam(TabelA) / activiteit1(TabelB) / activiteit2(TabelB) / ...

En zou je kunnen vertellen wat de namen van je tabellen zijn en welke kolommen ze hebben?
 
ik vermoed dat je zoiets bedoeld
Code:
SELECT tabelA.* ,tabelB.*
FROM tabelA  
LEFT JOIN tabelB on referentieA = ReferentieB
ORDER BY tabelA.Fnaam ASC

als je elke join wil weten moet je bij google eens left join zoeken bij afbeeldingen en dan iets van term verzameling.Er bestaan zo'n mooie voorbeeldjes van
 
ALs dit klopt:
TabelA bevat vb. 10 records = namen
TabelB bevat vb. 50 records = namen + bijpassende verrichtingen
dan hoef je dus alleen een SELECT op TabelB te doen. Dan heb je geen joins nodig. Die je overigens toch al niet nodig hebt :)
Code:
SELECT tabelA.* ,tabelB.*
WHERE TabelA.NaamID = TabelB.NaamID
ORDER BY tabelA.Fnaam ASC
 
Met deze query (en de tips) kom ik stilaan in de buurt van hetgeen ik vooropstelde - toch nog een error.

fp_sQry="SELECT tabelB.*, tabelA.Ldnnr, tabelA.Fnaam, tabelA.Vnaam,
(Select Sum(AntlAh) FROM tabelB) AS [TTAntlAh],
(Select Sum(AntlAh) FROM tabelB WHERE FnaamAh=[tabelA].Fnaam) AS [TAntlAh]
FROM tabelA
WHERE tabelA.Ldnnr >= 1 (=alleen de namen uit tabelA waarvan Ldnnr=1 of groter, dus niet deze waarvan er geen Ldnnr ingevuld is / Ldnnr is numeriek)
LEFT JOIN tabelB ON tabelA.Fnaam=tabelB.FnaamAh
ORDER BY tabelA.Fnaam, tabelA.Vnaam ASC"

Database Results Error
Description: Syntax error (missing operator) in query expression 'tabelA.Ldnnr>=1 left JOIN tabelB ON tabelA.Fnaam=tabelB.FnaamAh'.
Number: -2147217900 (0x80040E14)
Source: Microsoft JET Database Engine


Wat zou de 'missing operator' kunnen zijn ? Eventuele meerdere mogelijkheden kan ik testen 'bij eliminatie'.
Dank voor tip - Leifoet
 
Laatst bewerkt:
bekijk eens kollomnaam IS NULL of indien niet leeg NOT NULL

Vermoedelijk weet u het maar er kan geen where voor left join of join staan (indien geen geneste query)
of een query in een query
 
Laatst bewerkt:
Ik begrijp niet zo goed wat kenikavanbis bedoelt met kolomnaam IS NULL ...NOT NULL - hoe implementeer ik dit ? hoe waar hoort dit eventueel te staan ?
Probleem met WHERE voor JOIN was mij niet bekend - hoe kan ik dat hier omzeilen/oplossen met een geneste query ?

Dank - Leifoet
 
IS NULL ... NOT NULL - sorry zat op een verkeerd spoor : kolom Ldnnr uit (tabelA.Ldnnr >= 1) kan (inderdaad) 0-waarden aannemen.
 
een simpelere vorm

HAVING tabelnaam.kollomA = (SELECT id FROM kollomB ORDER BY id LIMIT 1)
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan