Dans l'un des cas suivants, si vous ne connaissez pas le PROJECT.num
/PROJECT_TO_TAGS.project_id
, vous devrez rejoindre les PROJECTS
table pour obtenir la valeur de l'identifiant pour découvrir les balises associées.
Utiliser 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)
Utiliser 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)
Utiliser des JOINS (c'est le plus efficace !)
Le DISTINCT
est nécessaire car les JOIN risquent de faire apparaître des données en double dans le jeu de résultats...
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