[SQL] joinen drie tabellen??

Pagina: 1
Acties:

  • huistra
  • Registratie: April 2001
  • Laatst online: 08-05-2024
Heb de volgende tabellen met oa de volgende eigenschappen:

Consumpties
-----------
cid

Hoeveelheden
------------
cid,pid
hoeveeluitproduct

Producten
----------
pid
naam
inhoudsmaat

Een consumptie kan bestaan uit meerdere producten. Een consumptie bestaat dus uit een of meerdere hoeveelheden uit meerdere producten (max 5). Een voorbeeld, een bacardi-cola bestaat bijvoorbeeld uit 0.2 (hoeveeluitproduct)liter (inhoudsmaat) cola (product) en 0.1 liter bacardi. De cid is dus bekend en ik wil graag alle onderdelen van deze consumptie uit de dbase halen. Dus alle hoeveelheden waar de cid overeenkomt en vervolgens dan alle productnamen en productinhoudsmaten waarvan de pid voorkomt in de geselecteerde hoeveelheden. Ik probeerde dit met een innerjoin, maar ik kan die cid daar niet in kwijt. Die cid hoeft ie dus niet nog es uit de dbase te halen. Deze is als variabele cid bekend op de huidige inetpagina.

Mijn poging:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
RS.Open "SELECT Hoeveelheden.hoeveeluitproduct, Producten.naam, Producten.inhoudsmaat 
FROM Hoeveelheden 
INNER JOIN Producten ON Hoeveelheden.pid = Producten.pid"

IF NOT RS.EOF THEN
x = 0
WHILE NOT RS.EOF
x = x + 1
SELECT CASE x
 CASE 1
inhoudsmaat1 = RS("inhoudsmaat")
bestanddeel1naam = RS("naam")
hoeveeluitproduct1 = RS("hoeveeluitproduct")
 CASE 2
inhoudsmaat2 = RS("inhoudsmaat")
bestanddeel2naam = RS("naam")
hoeveeluitproduct2 = RS("hoeveeluitproduct")
 CASE 3
inhoudsmaat3 = RS("inhoudsmaat")
bestanddeel3naam = RS("naam")
hoeveeluitproduct3 = RS("hoeveeluitproduct")
 CASE 4
inhoudsmaat4 = RS("inhoudsmaat")
bestanddeel4naam = RS("naam")
hoeveeluitproduct4 = RS("hoeveeluitproduct")
 CASE 5
inhoudsmaat5 = RS("inhoudsmaat")
bestanddeel5naam = RS("naam")
hoeveeluitproduct5 = RS("hoeveeluitproduct")
END SELECT
WEND
END IF
RS.Close()

Misschien dat iemand wat hulp kan bieden, ben nl. een redelijke newbie...

  • palloquin
  • Registratie: Juli 2000
  • Laatst online: 29-01-2021
Hoi,

Jammer genoeg hangt de syntax voor de join nogal af van je DBMS (database). SQL server =! Access =! Oracle =! MySQL(?)

Maar ok, hier voor SQL server

Ik ga er vanuit dat in in je consumptie tabel meer staat dan alleen je cid, want anders kun je gewoon een join op 2 tabellen doen:
SELECT h.hoeveeluitproduct p.inhoudsmaat, p.naam
FROM Hoeveelheden as h
INNER JOIN producten as p ON h.pid = p.pid
WHERE h.cid = [vul hier je CID in]
voor een derde tabel:
SELECT c.naam, h.hoeveeluitproduct p.inhoudsmaat, p.naam
FROM Hoeveelheden as h
INNER JOIN consupties as c ON h.cid = c.cid
INNER JOIN producten as p ON h.pid = p.pid
WHERE c.cid = [vul hier je CID in]
is dit ongeveer wat je wil?

HTH

  • palloquin
  • Registratie: Juli 2000
  • Laatst online: 29-01-2021
en WTF probeer je eigenlijk te doen in die While loop.. je vult daar 5 variable sets... waarom???

  • huistra
  • Registratie: April 2001
  • Laatst online: 08-05-2024
ik werk met een ACCESS database, maar ik kan wel ff proberen om je idee om te zetten naar de precieze join-syntax voor de access...

Trouwens, dat idee van de drie tabllen in 1 keer is erg mooi, ik heb het nu zo gedaan dat ik het in 2 keer deed. Dus eerst alles uit de tabel Consumpties halen op basis van de cid en vervolgens in stap 2 nog es de informatie uit Hoeveelheden Producten halen. In je voorbeeld stond
code:
1
SELECT c.naam, h.hoeveeluitproduct p.inhoudsmaat, p.naam

Als ik nu meerdere (alle) kolommen uit de Consumptie wil halen, is Consumptie.* dan en geldige manier?

  • huistra
  • Registratie: April 2001
  • Laatst online: 08-05-2024
Op donderdag 13 december 2001 13:19 schreef palloquin het volgende:
en WTF probeer je eigenlijk te doen in die While loop.. je vult daar 5 variable sets... waarom???
Aangezien een consumptie uit max. 5 onderdelen uit product/hoeveelheden bestaat wil ik zo deze opslaan in 5 verschillende variabelen. Deze worden vervolgens weggeschreven in input-veldjes, zodat de gebruiker ze kan wijzigen. Maareh, dit was een probeerseltje, ben er zoals gezegd net een beetje mee bezig.....

  • palloquin
  • Registratie: Juli 2000
  • Laatst online: 29-01-2021
[b]Op donderdag 13 december 2001 13:20 schreef halen, is Consumptie.* dan en geldige manier?
:) Yep, goedzo! :)

  • huistra
  • Registratie: April 2001
  • Laatst online: 08-05-2024
heb nu het volgende:
code:
1
2
3
4
5
6
7
RS.Open = "SELECT Consumpties.*, Hoeveelheden.hoeveeluitproduct, Producten.inhoudsmaat, Producten.naam 
FROM Hoeveelheden 
INNER JOIN Consumpties 
ON Hoeveelheden.cid = Consumpties.cid 
INNER JOIN Producten 
ON Hoeveelheden.pid = Producten.pid
WHERE Consumpties.cid ="&cid

Heb ff wat enters gegeven om het leesbaar te houden, maar ik krijg nog steeds een foutmelding.

Syntax error (missing operator) in query expression 'Hoeveelheden.cid = Consumpties.cid INNER JOIN Producten ON Hoeveelheden.pid = Producten.pid'.

Misschien dat iemand er nog even een blik op kan werpen?

  • huistra
  • Registratie: April 2001
  • Laatst online: 08-05-2024
Ook wanneer ik de gewone Join gebruik lukt het niet:
code:
1
2
3
4
5
RS.Open = "SELECT Hoeveelheid.hoeveeluitproduct, Producten.inhoudsmaat, Producten.naam 
FROM Hoeveelheden 
INNER JOIN Producten 
ON Hoeveelheden.pid = Producten.pid 
WHERE Hoeveelheden.cid = "&cid

Hierbij krijg ik de volgende foutmelding:
No value given for one or more required parameters.
/iisadmin/testweb/rumba/wijzig_consumptie.asp, regel 35
:'(

  • Goodielover
  • Registratie: November 2001
  • Laatst online: 18-08 11:34

Goodielover

Only The Best is Good Enough.

Op donderdag 13 december 2001 15:04 schreef huistra het volgende:
Ook wanneer ik de gewone Join gebruik lukt het niet:
code:
1
2
3
4
5
RS.Open = "SELECT Hoeveelheid.hoeveeluitproduct, Producten.inhoudsmaat, Producten.naam 
FROM Hoeveelheden 
INNER JOIN Producten 
ON Hoeveelheden.pid = Producten.pid 
WHERE Hoeveelheden.cid = "&cid

Hierbij krijg ik de volgende foutmelding:
[..]

:'(
In de select staat hoeveelheid.hoeveeluitproduct. De tabel hoeveelheid bestaat niet (moet hoeveelheden zijn)

Eigenlijk vind ik hoeveelheid beter. Tabelnamen horen enkelvoud te zijn. Ik zie dat bijna iedereen hier niet doen, maar kijk maar eens naar de standaard voorbeelden in DB-boeken, daar wordt altijd department, employee, salary e.d. gebruikt.
Pagina: 1