sql >> Databáze >  >> RDS >> Mysql

Vyberte všechny projekty, které mají odpovídající značky

V některém z následujících případů, pokud neznáte PROJECT.num /PROJECT_TO_TAGS.project_id , budete se muset připojit k PROJECTS tabulku, abyste získali hodnotu id pro zjištění, jaké značky má přidružené.

Pomocí 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)

Pomocí 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)

Pomocí JOINS (toto je nejúčinnější!)

DISTINCT je nezbytné, protože JOINy ​​riskují, že se v sadě výsledků objeví duplicitní data...

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. Jak Pi() funguje v PostgreSQL

  2. Proč byla požadována neplatná konverze KÓD CHYBY:17132?

  3. Použití JSONB v PostgreSQL:Jak efektivně ukládat a indexovat data JSON v PostgreSQL

  4. Převeďte vybrané hodnoty sloupce na jiný řádek pomocí select se stejným ID part2