In uno dei seguenti casi, se non conosci il PROJECT.num
/PROJECT_TO_TAGS.project_id
, dovrai aderire ai PROJECTS
tabella per ottenere il valore id per scoprire quali tag ha associato.
Utilizzo di 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)
Utilizzo di 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)
Utilizzare JOINS (questo è il più efficiente!)
Il DISTINCT
è necessario perché le JOIN rischiano che i dati duplicati vengano visualizzati nel set di risultati...
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