In elk van de volgende gevallen, als u het PROJECT.num
. niet kent /PROJECT_TO_TAGS.project_id
, moet je deelnemen aan de PROJECTS
tabel om de ID-waarde te krijgen om erachter te komen welke tags eraan zijn gekoppeld.
IN gebruiken
SELECT p.*
FROM PROJECTS p
JOIN PROJECTS_TO_TAGS pt ON pt.project_id = p.num
WHERE pt.tag_id IN (SELECT x.tag_id
FROM PROJECTS_TO_TAGS x
WHERE x.project_id = 4)
EXISTS gebruiken
SELECT p.*
FROM PROJECTS p
JOIN PROJECTS_TO_TAGS pt ON pt.project_id = p.num
WHERE EXISTS (SELECT NULL
FROM PROJECTS_TO_TAGS x
WHERE x.project_id = 4
AND x.tag_id = pt.tag_id)
JoINS gebruiken (dit is de meest efficiënte!)
De DISTINCT
is noodzakelijk omdat JOIN's het risico lopen dat dubbele gegevens in de resultatenset verschijnen...
SELECT DISTINCT p.*
FROM PROJECTS p
JOIN PROJECTS_TO_TAGS pt ON pt.project_id = p.num
JOIN PROJECTS_TO_TAGS x ON x.tag_id = pt.tag_id
AND x.project_id = 4