Een join in dezelfde tabel?

Status
Niet open voor verdere reacties.

brokkel

Nieuwe gebruiker
Lid geworden
3 jan 2011
Berichten
4
Ik vertrek van de onderstaande tabel.
Dit zijn requests die verschillende members van een team naar elkaar sturen om van shift te wisselen. Wanneer iemand een aanvraag stuurt (requestor), wordt er meteen een duplicaat gecreeerd op de naam van de tegenpartij (approver), dit is nodig omdat de requestor bv naar 5 verschillende mensen een aanvraag kan sturen voor dezelfde shift.
Met de "linked" colom, blijft zichtbaar dat deze verschillende rows gelinked zijn aan dezelfde request, waarvoor geldt (requestor => autonumber = linked, approver => autonumber <> linked)

autonumber thedate membername description Linked
4615 03-Jan-11 Jos Can I change shifts with you? 4615
4616 03-Jan-11 Thomas Can I change shifts with you? 4615
4619 05-Jan-11 Karel I need to go to the doctor, thanks! 4619
4620 05-Jan-11 Thomas I need to go to the doctor, thanks! 4619

Dit zijn dus 2 requests, van Jos naar Thomas voor 03Jan en van Karel naar Thomas voor 05Jan.

Wat ik nu wil bekomen is het volgende:

thedate Requestor description
03-Jan-11 Jos Can I change shifts with you?
05-Jan-11 Karel I need to go to the doctor, thanks!

Thomas moet een overzicht kunnen krijgen van de requests aan zijn adres.
Ik probeer hier een SQL query voor te schrijven. De moeilijkheid is, dat ik een extra column wil toevoegen, die de requestor weergeeft.
Maar deze waarde komt dus steeds van een andere row. Ik laat de rows zien waar autonumber <> linked is. Maar de requestor komt van de rows waar autonumber = linked is.

Iemand enig idee, hopelijk was dit een beetje duidelijk :)
 
Je kunt een tabel meerdere keren openen door hem te renamen, dan kun je naar beide velden verwijzen. Hier is een voorbeeldje:

[sql]
SELECT vrager.naam, vraag.vraag, beantwoorder.naam
FROM personen AS vrager
INNER JOIN vraag ON vraag.vrager_id = vrager.id
INNER JOIN personen AS beantwoorder ON vraag.beantwoorder_id = beantwoorder.id
[/sql]


Op deze manier kun je ook jouw probleem oplossen :)
 
Hey Frats,

Hartelijk bedankt, maar ik vrees dat ik niet helemaal mee ben ....

Ik heb wat geprobeerd, maar krijg steeds foutmeldingen, waarschijnlijk doe ik nog iets verkeerd.

[SQL]SELECT thedate, description, membername, requestor
FROM specialplanning_TBL
WHERE membername='Thomas'
AND autonumber <> linked
AS newtable
INNER JOIN specialplanning_TBL.membername as requestor ON specialplanning_TBL.linked = newtable.autoumber;[/SQL]
 
JOIN komt voor WHERE, de volgorde is:

SELECT
FROM
JOIN
WHERE
GROUP BY
HAVING
ORDER BY
LIMIT

als ik me niet vergis althans :P De eerste paar weet ik iig wel zeker, je moet de JOIN naar boven verplaatsen, voor de WHERE.
 
Als ik de WHERE achteraan zet, krijg ik "Syntax error in Join operation". Ook denk ik dat de query helemaal niet klopt eerlijk gezegd :confused:

[SQL]SELECT thedate, description, membername, requestor
FROM specialplanning_TBL
AS newtable
INNER JOIN specialplanning_TBL.membername AS requestor ON specialplanning_TBL.linked = newtable.autoumber
WHERE membername='Thomas'
AND autonumber <> linked ; [/SQL]
 
Ik lijk het gevonden te hebben!
Op een compleet andere manier, maar toch bedankt! :)

[SQL]SELECT requestor.membername AS requestor, approver.autonumber, approver.membername, approver.thedate, approver.description
FROM specialplanning_tbl AS approver, specialplanning_tbl AS requestor
WHERE approver.linked <> approver.autonumber
AND approver.membername = 'Thomas'
AND requestor.autonumber = approver.linked;[/SQL]
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan