Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Wählen Sie alle Projekte mit übereinstimmenden Tags aus

In einem der folgenden Fälle, wenn Sie PROJECT.num nicht kennen /PROJECT_TO_TAGS.project_id , müssen Sie den PROJECTS beitreten Tabelle, um den ID-Wert zu erhalten, um herauszufinden, welche Tags damit verknüpft sind.

Eingabe verwenden

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)

Verwendung von EXISTEN

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)

Verwendung von JOINS (dies ist die effizienteste!)

Der DISTINCT ist notwendig, weil JOINs riskieren, dass doppelte Daten in der Ergebnismenge auftauchen...

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