Toon posts:

[SQL / Access] Inner join / left join 3 tabellen

Pagina: 1
Acties:
  • 114 views sinds 30-01-2008
  • Reageer

Verwijderd

Topicstarter
Heb drie tabellen met de volgende opbouw:
code:
1
2
3
4
5
6
7
8
9
10
11
12
object
  obj_id
  soort_id
  status_id

soort
  soort_id
  omschrijving

status
  statis_id
  status

Met data:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
OBJECT
obj_id soort_id status_id
1    1     null  
2    1     1
3    2     2

SOORT
soort_id  omschrijving
1        Bla_bla_1
2        Bla_bla_2

STATUS
status_id status
1       gereed
2       niet gereed

Nu moet ik een ms access query hebben die voor object met obj_id = 1 de soort en de status erbij zoekt.

Eerste gedeelte heb ik al:
code:
1
2
select * from object left join status on status.status_id = object.status_id
where object.obj_id = 1

Hiermee krijg ik dus de gegevens over object 1 (ook al is er voor de status NIETS ingevuld).
Nu wil ik nog het soort erbij hebben. Maar heb geen idee (ben al een tijd bezig) hoe dit voorelkaar te krijgen in Access. (dus met die INNER, LEFT en RIGHT joins)

Heeft iemand een oplossing :?

Verwijderd

code:
1
2
3
4
5
6
SELECT s.omschrijving, t.status
FROM soort s, status t, object o
WHERE o.obj_id = 1
AND o.soort_id = s.soort_id
AND o.status_id = t.status_id
;

Als het goed is doet ie het zo. Aan die query wizards van Access heb je zowiezo weinig, aan een fatsoenlijke SQL tutorial heb je meer!

Verwijderd

Topicstarter
Op maandag 06 mei 2002 14:36 schreef DaJaN het volgende:
code:
1
2
3
4
5
6
SELECT s.omschrijving, t.status
FROM soort s, status t, object o
WHERE o.obj_id = 1
AND o.soort_id = s.soort_id
AND o.status_id = t.status_id
;

Als het goed is doet ie het zo. Aan die query wizards van Access heb je zowiezo weinig, aan een fatsoenlijke SQL tutorial heb je meer!
Op de aangeleverde manier, krijg je geen rijen terug, omdat voor object 1 de status NULL, is. Dus moet je een outer join gebruiken (of heet dat nu weer anders :? ).

Het volgende zou een oplossing zijn,
code:
1
2
3
4
5
6
SELECT s.omschrijving, t.status
FROM soort s, status t, object o
WHERE o.obj_id = 1
AND o.soort_id = s.soort_id
AND o.status_id *= t.status_id
;

LET OP het '*' tussen o.status_id en t.status_id (misschien moet'ie ook wel aan de andere kant van de '=' )

Maar helaas, access kan hier niet mee overweg. Dit is WEL goed SQL, maar GEEN goed ms access sql :(

Door dit soort dingen heb ik een hekel aan MS Access :r :r :r , maar ja, dit is een opdracht voor m'n werk, en er zit dus niets anders op dan dit probleem op te lossen :'(

  • Aetje
  • Registratie: September 2001
  • Laatst online: 18-12-2025

Aetje

Troubleshooting met HAMERRR

code:
1
2
3
4
select * 
from (object left join status on status.status_id = object.status_id) 
    left join soort on object.Soort_ID = soort.Soort_ID
where object.obj_id = 1;

Zoiets dus? Dit zal die query wizard dr uit flikkeren als je em goed instelt... :r

Maar 't werkt.

Forget your fears...
...and want to know more...


Verwijderd

Op maandag 06 mei 2002 15:11 schreef EchtWel het volgende:

[..]

Op de aangeleverde manier, krijg je geen rijen terug, omdat voor object 1 de status NULL, is. Dus moet je een outer join gebruiken (of heet dat nu weer anders :? ).

Het volgende zou een oplossing zijn,
code:
1
2
3
4
5
6
SELECT s.omschrijving, t.status
FROM soort s, status t, object o
WHERE o.obj_id = 1
AND o.soort_id = s.soort_id
AND o.status_id *= t.status_id
;

LET OP het '*' tussen o.status_id en t.status_id (misschien moet'ie ook wel aan de andere kant van de '=' )

Maar helaas, access kan hier niet mee overweg. Dit is WEL goed SQL, maar GEEN goed ms access sql :(

Door dit soort dingen heb ik een hekel aan MS Access :r :r :r , maar ja, dit is een opdracht voor m'n werk, en er zit dus niets anders op dan dit probleem op te lossen :'(
Tja, ik ken het probleem! Joins ben ik niet echt goed in...

Verwijderd

Topicstarter
Op maandag 06 mei 2002 15:15 schreef Aetje het volgende:
code:
1
2
3
4
select * 
from (object left join status on status.status_id = object.status_id) 
    left join soort on object.Soort_ID = soort.Soort_ID
where object.obj_id = 1;

Zoiets dus? Dit zal die query wizard dr uit flikkeren als je em goed instelt... :r

Maar 't werkt.
Na een tijdje kooien met die %#$#$% wizard van access, heb ik dit inderdaat er ook uitgekregen.

Maar ik ben iemand die graag wil begrijpen hoe dit in elkaar steekt, maar kom er maar moeilijk uit wat er nu precies gebeurt :(

Ik bedoel, zou dit dus niet zonder die $@%@$% wizard van access kunnen reproduceren. En daar baaaaaal ik van |:(

  • Aetje
  • Registratie: September 2001
  • Laatst online: 18-12-2025

Aetje

Troubleshooting met HAMERRR

Hoe dat in elkaar steekt? Heel simpel. Is een geneste join.

Eerst alles tussen haakjes resolven... Daarna wat er uitkomt, met hetgeen buiten haakjes resolven. Een dubbele left join op Object in dit geval...

[edit] Denk es logisch na over wat hier gebeurd met de verzameling. En hou in de gaten dat SQL nooit meer als 2 verzamelingen tegelijk kan bewerken in een join. Dus, je zult moeten nesten: (Verzameling 1 JOIN Verzameling 2) JOIN Verzameling 3

Forget your fears...
...and want to know more...


Verwijderd

Topicstarter
Op maandag 06 mei 2002 15:27 schreef Aetje het volgende:
Hoe dat in elkaar steekt? Heel simpel. Is een geneste join.

Eerst alles tussen haakjes resolven... Daarna wat er uitkomt, met hetgeen buiten haakjes resolven. Een dubbele left join op Object in dit geval...
OK OK je hebt wel gelijk, maar vind de standaard SQL met dat '*=' toch veel makkelijker te lezen.

  • Lister
  • Registratie: September 2001
  • Laatst online: 15-02-2022
Je kan nergens zo snel en makkelijk queries maken als in Access vind ik, al is de onderliggende SQL code inderdaad niet altijd even leesbaar.

Je maakt een nieuwe query aan in designmode en selecteert de 3 tabellen, als je goede naamgeving hebt gebruikt worden er al automatisch koppelingen gelegd zo niet dan moet je 2 keer een veld van de ene tabel naar de andere tabel slepen.
Dan rechtermuisknop op de koppelingen en de juiste LEFT of RIGHT join kiezen voor beide koppelingen.
En dan nog de outputvelden aangeven en klaar.
Nog geen 3 minuten werk.

Ik moest laatst een query maken in Oracle met iets van 10 gekoppelde tabellen, daar ben ik gewoon ruim 2 uur mee bezig geweest omdat je zelf alle tabel- en veldnamen moet opzoeken en intypen. De slechte naamgeving hielp trouwens ook niet echt mee. En dan was dat nog met TOAD want dat PL/SQL vind ik helemaal niets.
Pagina: 1