sql >> Databasteknik >  >> RDS >> Mysql

Välj alla projekt som har matchande taggar

I något av följande fall, om du inte känner till PROJECT.num /PROJECT_TO_TAGS.project_id måste du gå med i PROJECTS tabell för att få id-värdet för att ta reda på vilka taggar den har associerat.

Med 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)

Använder 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)

Använda JOINS (detta är den mest effektiva!)

DISTINCT är nödvändigt eftersom JOINs riskerar att duplicerad data dyker upp i resultatuppsättningen...

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. fetch_assoc returnerar senast infogade element

  2. Arbeta med Salesforce.com i Alpha Anywhere

  3. java.math.BigInteger kan inte castas till java.lang.Integer

  4. NEWID() vs NEWSEQUENTIALID() i SQL Server:Vad är skillnaden?