[mysql] query 3 tabellen

Pagina: 1
Acties:

  • mark_gl
  • Registratie: September 2001
  • Laatst online: 30-08 09:45
Mijn bedoeling is een query te maken dat uit 3 tabellen gegevens haalt. Dit is mij gelukt met een simpele select die 3 tabellen aanspreekt (zie hieronder)

SELECT C.klaID, C.klaAchternaam, C.klaVoornaam, B.bedNaam FROM tblklant as C, kplprokla as K, tblbedrijf as B WHERE C.klaID=K.klaID AND C.bedID=B.bedID AND K.proID=$proID

Maar nu weet ik niet zeker of een INNER JOIN beter/sneller werkt, zo ja dan wil ik deze gaan implementeren maar ik kom niet verder dan een inner join met 2 tabellen te koppelen misschien heeft iemand de oplossing voor me?

SELECT C.klaID, C.klaAchternaam, C.klaVoornaam FROM tblklant as C INNER JOIN kplprokla as K ON C.klaID=K.klaID WHERE K.proID=$proID

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 28-08 12:00

Janoz

Moderator Devschuur®

!litemod

Het koppelen van 2 tabellen levert een nieuwe samengestelde tabel op. Deze kun je vervolgens weer joinen. Je kunt het dus eigenlijk zo zien:
code:
1
2
3
4
5
6
7
(
  tabel
 JOIN
  tabel
) 
JOIN
 tabel

Door de haakjes te laten staan (die zet je dus om je hele join + on conditie heen) hou je het voor jezelf leesbaar.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


  • mark_gl
  • Registratie: September 2001
  • Laatst online: 30-08 09:45
Yes, ik heb hem !!! Thanks

SELECT C.klaID, C.klaAchternaam, C.klaVoornaam, B.bedNaam FROM (tblklant as C INNER JOIN kplprokla as K ON C.klaID=K.klaID) INNER JOIN tblbedrijf as B ON C.bedID=B.bedID WHERE K.proID=$proID

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

Een inner join is anders, als jij zeker weet dat er voor elke tupel in elke tabel er ook een is in de andere tabellen moet je geen inner/outer joins gebruiken.

Er is me wel es verteld dat inner join sneller is dan een equijoin gebruiken, maar dat zal eerder aan het gebruikte rdbms liggen dan aan het principe achter joins.

Btw, als je al moeite hebt met een simpele query met wat equijoins (duidend op je "dit is mij gelukt") zou ik echt niet moeite gaan doen er een inner join versie van te maken. Bij mijn weten levert het niet of nauwelijks voordelen op.

Wel is het aan te raden je queries wat duidelijker neer te zetten bijv zo:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
SELECT 
  C.klaID, 
  C.klaAchternaam, 
  C.klaVoornaam, 
  B.bedNaam 
FROM 
  tblklant as C, 
  kplprokla as K, 
  tblbedrijf as B 
WHERE 
  C.klaID=K.klaID 
  AND 
  C.bedID=B.bedID 
  AND 
  K.proID=$proID

  • mark_gl
  • Registratie: September 2001
  • Laatst online: 30-08 09:45
Thanks ACM voor je "extra" advies :)