Mysql
 sql >> Database >  >> RDS >> Mysql

Seleziona tutti i progetti che hanno tag corrispondenti

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