Mysql
 sql >> Base de données >  >> RDS >> Mysql

Sélectionnez tous les projets qui ont des balises correspondantes

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