Mysql
 sql >> база данни >  >> RDS >> Mysql

Изберете всички проекти, които имат съвпадащи тагове

В някой от следните случаи, ако не знаете PROJECT.num /PROJECT_TO_TAGS.project_id , ще трябва да се присъедините към PROJECTS таблица, за да получите стойността на идентификатора, за да разберете какви маркери е свързана.

Използване на 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)

Използване на 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)

Използване на JOINS (това е най-ефективното!)

DISTINCT е необходимо, тъй като JOIN рискуват дублирани данни да се появят в набора от резултати...

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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Защо препратките към wp_postmeta са толкова бавни?

  2. Свързване на android с MS SQL SERVER 2008

  3. Какво всъщност означава числото в скоби?

  4. Показване (списък) MySQL бази данни на Linux чрез командния ред

  5. Как да върнете позицията на аргумент в списък с аргументи в MySQL