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?
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?