В някой от следните случаи, ако не знаете PROJECT.num
/PROJECT_TO_TAGS.project_id
, ще трябва да се присъедините към PROJECTS
таблица, за да получите стойността на идентификатора, за да разберете какви маркери е свързана.
Използване на IN
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
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 (това е най-ефективното!)
DISTINCT
е необходимо, тъй като JOIN рискуват дублирани данни да се появят в набора от резултати...
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