sql >> Database >  >> RDS >> Mysql

Selecteer alle projecten die overeenkomende tags hebben

In elk van de volgende gevallen, als u het PROJECT.num . niet kent /PROJECT_TO_TAGS.project_id , moet je deelnemen aan de PROJECTS tabel om de ID-waarde te krijgen om erachter te komen welke tags eraan zijn gekoppeld.

IN gebruiken

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)

EXISTS gebruiken

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)

JoINS gebruiken (dit is de meest efficiënte!)

De DISTINCT is noodzakelijk omdat JOIN's het risico lopen dat dubbele gegevens in de resultatenset verschijnen...

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


  1. Hoe MySQL te beveiligen:deel twee

  2. Hoe de MATCH()-functie werkt in MySQL

  3. PHP PDO bindParam() en MySQL BIT

  4. QueryException SQLSTATE [HY000] [1045] Toegang geweigerd voor gebruiker 'homestead'@'localhost' (met wachtwoord:JA)