sql >> Base de Datos >  >> RDS >> Mysql

Seleccione todos los proyectos que tengan etiquetas coincidentes

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