En cualquiera de los siguientes casos, si no conoce el PROJECT.num
/PROJECT_TO_TAGS.project_id
, tendrás que unirte a los PROJECTS
table para obtener el valor de identificación para averiguar qué etiquetas tiene asociadas.
Usando EN
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)
Usando EXISTE
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)
Usando JOINS (¡este es el más eficiente!)
El DISTINCT
es necesario porque JOIN corre el riesgo de que aparezcan datos duplicados en el conjunto de resultados...
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