Toon posts:

[MySQL] Fouten in joins opsporen

Pagina: 1
Acties:

Verwijderd

Topicstarter
Hoihoi,

stel, ik heb 2 tabellen, werknemer en job.

Werknemer:
---------------
ID
Naam
Adres

Job:
-----
Werknemer_LNK
Uren
Voltooid

Stel dat er een werknemer in de tabel werknemers staat, maar deze heeft geen jobs toegekend, hoe kan ik dit dan opzoeken.

Normaal zou ik zoiets doen als: "SELECT Naam FROM Werknemer WHERE ID NOT IN (Job.Werknemer_LNK) AND Werknemer.ID = Job.Werknemer_LNK;"

Echter, omdat juist Job.Werknemer_LNK nodig is om zo'n query uit te voeren gaat dit nooit lukken, want ik zoek juist de mensen die er NIET in staan ;) Hoe zou ik nu toch een overzicht kunnen krijgen van alle Werknemers die nergens een Werknemer_LNK in de tabel Job hebben staan? Iemand tips? Thanx!

  • nxt
  • Registratie: November 2001
  • Laatst online: 04-02 09:36

nxt

zoiets?
SQL:
1
2
3
4
SELECT w.Naam FROM Werknemer w 
  LEFT JOIN Job j 
  ON w.ID = j.Werknemer_LNK
  WHERE j.Werknemer_LNK IS NULL

  • Yoshi|IA2
  • Registratie: Augustus 2003
  • Laatst online: 10-10-2018
Met subqueries misschien zo?

code:
1
2
3
4
5
6
SELECT w.naam
FROM Werknemer w
WHERE w.ID NOT IN
    ( SELECT j.Werknemer_LNK
      FROM Job j
    )

Verwijderd

Topicstarter
Subqueries kunnen toch helemaal niet in MySQL?
Ik krijg een error..

Ik ga ff het idee van nxt proberen!

Verwijderd

Topicstarter
En die werkt wél! :D

Dank, dank, dank!

  • Yoshi|IA2
  • Registratie: Augustus 2003
  • Laatst online: 10-10-2018
Waarom zouden subqueries niet gaan in mysql?
Ik gebruik dit al 3jaar lang in projecten en taken voor unief...

  • whoami
  • Registratie: December 2000
  • Laatst online: 21:56
yoshi_rules schreef op 23 maart 2004 @ 14:17:
Waarom zouden subqueries niet gaan in mysql?
Ik gebruik dit al 3jaar lang in projecten en taken voor unief...
In MySQL?

https://fgheysels.github.io/


  • Yoshi|IA2
  • Registratie: Augustus 2003
  • Laatst online: 10-10-2018
Inderdaad...

Ik heb net zitten proberen op webserver van unief, en krijg het niet aan het bollen, dus waarschijnlijk draait daar de 4.0 op.
Voor projecten en taken zet ik ook wel effe zelf een mysql-server op omdat de webserver nogal traag is. Ik neem dan telkens de laatste versie die beschikbaar is, en daar kun je dus wel subqueries in gebruiken (ik geloof vanaf de 4.1).

[ Voor 12% gewijzigd door Yoshi|IA2 op 23-03-2004 14:41 ]


  • djc
  • Registratie: December 2001
  • Laatst online: 08-09-2025

djc

yoshi_rules schreef op 23 maart 2004 @ 14:37:
Inderdaad...

Ik heb net zitten proberen op webserver van unief, en krijg het niet aan het bollen, dus waarschijnlijk draait daar de 4.0 op.
Voor projecten en taken zet ik ook wel effe zelf een mysql-server op omdat de webserver nogal traag is. Ik neem dan telkens de laatste versie die beschikbaar is, en daar kun je dus wel subqueries in gebruiken (ik geloof vanaf de 4.1).
Jammer dat 4.1 zwaar alpha is, daar kan je echt niet mee aankomen bij een klant.

Rustacean


  • curry684
  • Registratie: Juni 2000
  • Laatst online: 12-05 22:23

curry684

left part of the evil twins

Verwijderd schreef op 21 maart 2004 @ 12:01:
Subqueries kunnen toch helemaal niet in MySQL?
Ik krijg een error..
Not to mention dat het in dit geval ronduit fout is: dit soort problemen met een subquery oplossen hebben een best-case van 'net zo snel' als met een join, en worst-case van veeeeeel langzamer.

Professionele website nodig?


  • whoami
  • Registratie: December 2000
  • Laatst online: 21:56
Een OUTER JOIN kan ook best op de performance wegen hoor.

https://fgheysels.github.io/


  • Yoshi|IA2
  • Registratie: Augustus 2003
  • Laatst online: 10-10-2018
curry684 schreef op 23 maart 2004 @ 16:10:
[...]

Not to mention dat het in dit geval ronduit fout is: dit soort problemen met een subquery oplossen hebben een best-case van 'net zo snel' als met een join, en worst-case van veeeeeel langzamer.
Daar heb je eigenlijk wel gelijk in, zeker in MySQL die geen query optimalisatie heeft.

  • curry684
  • Registratie: Juni 2000
  • Laatst online: 12-05 22:23

curry684

left part of the evil twins

whoami schreef op 23 maart 2004 @ 16:30:
Een OUTER JOIN kan ook best op de performance wegen hoor.
Vanzelfsprekend, maar dan ligt het in ieder geval aan de data en niet aan de foute aanpak :)

Met nxt's query kan de database op basis van de keys de koppeling reeds leggen, en heel sneaky op de foreign key een NULL-test uitvoeren. Indien netjes zoals het hoort de primary en foreign keys goed indexed zijn kan het dus onmogelijk sneller dan dit, omdat de filtering reeds klaar is voordat er naar non-indexed fields gekeken hoeft te worden.

Professionele website nodig?

Pagina: 1