Query over 4 tabellen
Ik zit met het volgende probleem:
Ik heb 4 tabellen zonder primary keys (kan ik ook niet maken vanwege meerdere dezelfde waarden):
Tabel | Kolom | niet van toepassing
-----------------------------------------------------------------
SAST | RID en SID | en nog meer kolommen
RAST | RID en Telefoon | en nog meer kolommen
MAST | RID en CID | en nog meer kolommen
CAST | CID en Naam | en nog meer kolommen
In SAST heb ik een kolom RID die matched met een RID uit MAST en een RID uit RAST.
In RAST heb ik een kolom RID die matched met een RID uit MAST.
In MAST heb ik een kolom RID en CID
In CAST heb ik een kolom CID die matched met een CID uit MAST.
Uiteraard staan er nog meerdere kolommen met gegevens in iedere tabel, maar dit zijn degene die een overeenkomst hebben.
Nu wil een query trekken op RID uit SAST en daarmee via MAST meerdere gegevens ophaald uit CAST (naam) en uit RAST (telefoon)
Ik heb dan ook de volgende query die wel werkt maar hij is mega traag: 18 sec
Weet iemand hoe dit komt? Is de query echt zo brak of?
Tot nu toe kan ik met de volgende query gegevens ophalen uit alle 4 de tabellen:
SELECT SAST.SID, SAST.RID, CAST.Name, RAST.Telefoon
FROM SAST INNER JOIN
((CAST INNER JOIN MAST ON CAST.CID = MAST.CID)
INNER JOIN RAST ON MAST.RID = RAST.RID)
ON SAST.RID = RAST.RID ORDER BY SAST.SID
Kan iemand me helpen?
Alvast bedankt
Gr,
Matthijs
Gewijzigd op 01/01/1970 01:00:00 door Matthijs
Ga normaliseren, dat lost de problemen op en/of maakt de oplossing vele malen eenvoudiger. Om te beginnen met de pk's.
Even ter opheldering:
RID en Telefoon staan niet in 1 kolom maar apart:
Heb het niet duidelijk neergezet:
Tabel | Kolom1 | Kolom2 | en nog meer kolommen
-----------------------------------------------------------------
SAST | RID | SID | en nog meer kolommen
RAST | RID | Telefoon | en nog meer kolommen
MAST | RID | CID | en nog meer kolommen
CAST | CID | Name | en nog meer kolommen
SELECT SAST.SID, SAST.RID, CAST.Name, RAST.Telefoon
FROM SAST INNER JOIN
((CAST INNER JOIN MAST ON CAST.CID = MAST.CID)
INNER JOIN RAST ON MAST.RID = RAST.RID)
ON SAST.RID = RAST.RID ORDER BY SAST.SID
Gr,
Matthijs
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<?php
$query= "SELECT
s.SID,
s.RID,
c.Name,
r.Telefoom
FROM
SAST AS s
INNER JOIN
(CAST AS c
INNER JOIN
(MAST AS m
INNER JOIN
RAST AS r
ON
m.RID = r.RID)
ON
m.CID = c.CID)
ON
s.SID =c.CID"
?>
$query= "SELECT
s.SID,
s.RID,
c.Name,
r.Telefoom
FROM
SAST AS s
INNER JOIN
(CAST AS c
INNER JOIN
(MAST AS m
INNER JOIN
RAST AS r
ON
m.RID = r.RID)
ON
m.CID = c.CID)
ON
s.SID =c.CID"
?>
Gaat die zo sneller?
s.RID,
c.Name,
r.Telefoom
FROM
SAST AS s
INNER JOIN
(CAST AS c
INNER JOIN
(MAST AS m
INNER JOIN
RAST AS r
ON
m.RID = r.RID)
ON
m.CID = c.CID)
ON
s.SID =c.CID
Hmm net geprobeerd en hij komt vreemd genoeg met de melding:
#1054 - Unknown column 's.SID' in 'field list'
Er is toch wel degelijk een SID onder SAST
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<?php
$query= "SELECT
s.SID,
s.RID,
c.Name,
r.Telefoom
FROM
SAST AS s
INNER JOIN
(CAST AS c
INNER JOIN
(MAST AS m
INNER JOIN
RAST AS r
ON
m.RID = r.RID)
ON
m.CID = c.CID)
ON
s.SID =c.SID"
?>
$query= "SELECT
s.SID,
s.RID,
c.Name,
r.Telefoom
FROM
SAST AS s
INNER JOIN
(CAST AS c
INNER JOIN
(MAST AS m
INNER JOIN
RAST AS r
ON
m.RID = r.RID)
ON
m.CID = c.CID)
ON
s.SID =c.SID"
?>
Ik had sowiezo nog een klein foutje (moest niet c.CID zijn aan het eind, maar c.SID), maar zoals deze query is geschreven is wel zoals je met de JOINS moet werken. Hoe het kan dat die de kolom niet kent onder SAST snap ik nog niet.