Tabellen koppelen

Status
Niet open voor verdere reacties.

Plantje13

Nieuwe gebruiker
Lid geworden
13 feb 2014
Berichten
4
Hallo,
Ik wil een view bouwen met velden uit vijf verschillende tabellen, maar ik kom er nog niet helemaal uit. Als je informatie uit bijvoorbeeld drie verschillende tabellen gebruikt zou dat er zo kunnen uitzien (als ik het goed heb):

[sql]
SELECT
x.xx,
y.yy,
z.zz
FROM
tabel1 x
INNER JOIN tabel2 y
INNER JOIN tabel3 z
ON
x.xa=y.ya
ON
x.xb=z.za
;[/sql]

Dan staat tabel1 als het ware in het 'midden' en zijn tabel2 en tabel3 allebei aan tabel1 gekoppeld. Heb ik het zover goed?
Maar als je nu nog een tabel4 wil toevoegen, die gekoppeld is aan tabel2, hoe zet je dat dan neer?
Alvast bedankt,
Plantje13
 
Laatst bewerkt door een moderator:
Die kun je gewoon aansluitend meegeven.. normaal doe je het iets anders (imo). Let gewoon goed op dat je de juiste join gebruikt, heb je wel data in een tabel en niet in de ander dan zorgt een inner join ervoor dat je niets ziet. Een left join leest b.v. je eerste tabel en vult die dan aan met tabel 2, 3,4 en 5. Het is uiteraard wel zaak dat je iets van een ID of sleutel kolom hebt die in de andere tabellen ook voorkomt (je moet gedeelte data hebben).

Stel ik heb 5 tabellen: klanten (klant id, klantnaam), tabel2, tabel3, tabel4, tabel5 waarbij al deze tabellen wel een Klant ID veld hebben echter niet altijd data dan ziet je query er zo uit :
[sql]
SELECT [Klanten].*, [tabel2].*, [tabel3].*, [tabel4].*, [tabel5].*
FROM [Klanten]
LEFT JOIN [Tabel2]
ON [Klanten].[Klant ID] = [Tabel2].[Klant ID]
LEFT JOIN [Tabel3]
ON [Klanten].[Klant ID] = [Tabel3].[Klant ID]
LEFT JOIN [Tabel4]
ON [Klanten].[Klant ID] = [Tabel4].[Klant ID]
LEFT JOIN [Tabel5]
ON [Klanten].[Klant ID] = [Tabel5].[Klant ID]
[/sql]
Dit laat alles zien over 5 tabellen waarvan "Klanten" in de lead is. Die info wordt altijd getoond en de andere tabellen laten data zien als ze het hebben. De SELECT met de .*'s laat je teveel zien maar in dit voorbeeld gewoon even makkelijk. Stel je had in tabel2 een veld Klant ID en b.v. een Adres veld dan had je niet [tabel2].* moeten gebruiken maar [tabel2].[adres] (om te voorkomen dat je 5 x klant ID in een regel te zien krijgt).

Misschien heb je hier iets aan. Wat jij overigens doet kan ook prima, is alleen wat onoverzichtelijk en zorgen inner joins ervoor dat je de data in de tabellen moet kennen.
 
Laatst bewerkt door een moderator:
Dank je voor je reactie. Ik had geen INNER JOIN staan in mijn oorspronkelijke stukje, iemand heeft dat aangepast. (onderaan staat dat Tha devil??? mijn stukje heeft aangepast...) Ik had LEFT JOIN staan.
Het punt is nou juist, dat het gaat om tabellen waar niet overal hetzelfde sleutelveld (Klant ID in jouw voorbeeld) staat.

tabel 1 is Functieverband, met de velden
Medewerker ID
Organisatie ID
Functieverbandtype ID

Tabel 2 is Medewerker, met sleutelveld
Medewerker ID

Tabel 3 is Functieverbandtype (tijdelijk, vast, inhuur, etc), met sleutelveld
Functieverbandtype ID

Tabel 4 is Organisatie, met sleutelvelden
Organisatie ID
Organisatieonderdeel ID

Tabel 5 is Organisatieonderdeel, met sleutelveld
Organisatieonderdeel ID

Dus, tabel 2, 3 en 4 zijn te koppelen aan tabel 1, Tabel 5 alleen aan tabel 4.
 
Ah. Ik zag dat ik oorspronkelijk wel inner join had neergezet. Maar goed, de vraag ging ook niet om welk type join. Ik had gisteravond een helder idee, ik ga het proberen met een subquery. Los van de vraag of dit gaat werken, ben ik wel benieuwd of iemand mij kan vertellen of er nog andere manieren zijn om tabellen te koppelen.
 
Tip: Gebruik [sql][/sql] om je queries, dat maakt ze een stuk leesbaarder ;)

Andere manieren om een tabel te koppelen is via SELECT.
[sql]
SELECT
a.*,
b.*
FROM
tabel1 a,
tabel2 b
WHERE
a.id = b.tabel1_id
[/sql]
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan