Join in SQL

Status
Niet open voor verdere reacties.

sql_n00b

Nieuwe gebruiker
Lid geworden
22 nov 2004
Berichten
1
Beste forummers,

Ik heb een probleem met een (mySQL) database, waarbij de foreign key van de ene tabel anders opgeslagen is dan de primary key van de andere tabel, waardoor ik geen join kan maken.

Een voorbeeld (wegens praktische redenen, zal ik mijn eigen tabellen hier niet neerplaatsen),:

SELECT * FROM docent;
id | name
-------------
1 | Jan Janssen
2 | Ans de Vries

SELECT * FROM leerling;
id | leerling | nivo | mentor
------------------------------------
h1 | Gerrit Zalm | vwo | docent1 |
h2 | Wouter Bos | vmbo | docent2 |

het probleem is dus dat de foreign key mentor opgeslagen is met de tabelnaam, voor de key waarde. Vraag me niet waarom dit zo gedaan is, maar het is nu eenmaal zo.

Normaal zou je dus doen:
SELECT t1.name, t2.leerling, t2. nivo FROM docent AS t1, leerling AS t2
WHERE t1.id = t2.mentor;

maar dat werkt hier dus niet, omdat de mentor anders opgeslagen is dan het id.

Toch wil ik dit in 1 query oplossen (zonder PL/SQL)

Ik heb geprobeerd te werken met LIKE, LOCATE en IN functies maar dit allemaal levert mij een oneindig lange wachttijd op en uiteindelijk een crash (de tabellen bestaan uit 300.000+ rijen )
Wat moet ik doen?
 
WHERE right(t1.mentor,1) = t2.id

Als dat niet performed kun je proberen een functie index (weet niet of MySQL dat kent) aan te maken op tabel t1 met als functie de "right(mentor)" statement die je toepast in het WHERE gedeelte.


Grtz,
 
Een betere oplossing is om eerst vanuit de tabel leerling een nieuwe tabel te genereren waarbij het nummer van de mentor in een apart veld terecht komt.

Vervolgens kun je met behulp van de nieuwe tabel een nette join maken.

Aan het einde van je verwerking kun je de aangemaakte tabel weer verwijderen.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan